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.