next up previous contents
Next: Les spec de votre Up: Introduction à PERL Previous: La grammaire et la

Perl et le système d'exploitation

Perl n'est pas un langage tourné sur lui même, au contraire, il sait parler avec ce qui l'entoure. Avant tout, il existe une fonction qui permet de lancer n'importe quel programme ou fonction du système : system("cal") par exemple va lancer un shell[*] et va lancer le programme cal au sein de ce shell.

Il est possible de traiter les sorties d'un autre programme en ouvrant un filehandle sur la sortie standard d'un programme :

if(open(IN,"cal |"))
{
    # traitement
}

Permettra de reprendre la sortie de la commande cal pour lui faire subir un traitement quelconque. Un autre maniere de récupérer la sortie d'une commande de la manière suivante :

my $valueReturn = `date`;

Reprendra la sortie de la commande date dans la variable. Notez que les quotes sont inversés, c'est l'équivalent de la commande system() .

Une autre manière de faire appel à une commande système est de passer par la fonction exec(), au lieu de créer un nouveau process et de lancer à l'intérieur la commande, exec() va remplacer le programme Perl par la commande à lancer. Cela peut être utile dans le cadre d'un fork() . Cette fonction permet de créer en mémoire un double du programme.

Malgré la présence de ces commandes, il peut être pratique et surtout plus économe en ressource d'utiliser des fonctions propres à Perl plutôt que de lancer des programmes externes. Pour cela, heureusement, Perl dispose d'un grand nombre de fonctions soit fournies par défaut soit disponibles par l'intermédiaire de modules externes.

Souvent, lorsque vous êtes confronté à un cas ou vous devez faire appel à une commande externe, chercher au moyen de la commande perldoc si il n'est pas possible de le faire en interne, ainsi pour la commande chmod :

[~] $ perldoc -f chmod
=item chmod LIST

Changes the permissions of a list of files.  The first element of the
list must be the numerical mode, which should probably be an octal
number, and which definitely should I<not> a string of octal digits:
C<0644> is okay, C<'0644'> is not.  Returns the number of files
successfully changed.  See also L</oct>, if all you have is a string.

    $cnt = chmod 0755, 'foo', 'bar';
    chmod 0755, @executables;
    $mode = '0644'; chmod $mode, 'foo';      # !!! sets mode to
                                             # --w----r-T
    $mode = '0644'; chmod oct($mode), 'foo'; # this is better
    $mode = 0644;   chmod $mode, 'foo';      # this is best

[~] $

Perl est tout à fait capable de gérer lui même les permissions sur les fichier, de la même façon.

Lorsque vous n'avez pas dans les fonctions par défaut de Perl une commande pour remplacer un appel à une programme du système, il peut être intéressant de chercher sur le site ftp du CPAN si un module qui remplit l'objectif recherché n'existe pas.


next up previous contents
Next: Les spec de votre Up: Introduction à PERL Previous: La grammaire et la
Stephane TOUGARD
6/20/2001