Précision sur les blocs : les {} sont obligatoires!
En Perl, tout est vrai, sauf 0, '' ou "" (les chaînes vides) et undef.
On peut donc faire des opérations de ce genre :
if ($var){
# faire quelque chose
}
Comment faire la différence entre un variable non défini (qui contient donc undef)
et une variable qui contient une chaine vide, ou zéro?
Avec la fonction intégré defined :
$var = 0;
if (defined($var)){
print "var est défini!\n";
}
Perl supporte aussi d'autres syntaxes non-traditionnelle pour les boucles et les condictions. Les boucles et conditions peuvent être "inversées":
$hello = 1; print "hello" if $hello; @nos = (1, 4, 5, 6, 7); print "no : $_\n" while @nos; $ok = une_erreur(); warn "attention" unless $ok;
Perl a un ensemble de "variables magiques" qui sont défini automatiquement en tout temps. La plupart peuvent être modifié pour changer le comportement de certaines commandes. Généralement, on utilise très peu ces variables, sauf quelques unes :
Pour l'instant, concentrons nous sur $_.
Cette variable est utilisé automatiquement lorsqu'il n'y a pas de variables clairement donnée dans le contexte. Par exemple :
%couleurs = ('bleu' => 'ciel',
'rouge' => 'pomme',
'vert' => 'brocoli');
foreach (keys %couleurs){
print "$_\n";
}
@tableau = qw( longue liste de mots );
print while (@tableau);
foreach (1..10){
print "$_ : $tableau[$_]\n";
}
Les derniers exemples nous ont donnés de nouveaux opérateurs. Commencons par expliquer ces 2 là:
Perl supporte la plupart des opérateurs qu'on connait en C/Java, plus un certains nombres d'autres, dont en voici la liste des plus courants :
Pour la liste de tous les opérateurs, consulter le manuel de Perl
Tous les langages (enfin, la plupart...) supporte le concept de "sous-routine". Perl aussi!
La structure générale est comme ca :
sub nom {
}
Le mot clé sub, puis le nom de la fonctions, et un bloc de code séparé entre accolade.
Pour recevoir des paramètres :
sub nom {
my $param = shift; # la variable magique @_ a l'oeuvre
}
# Ou encore
sub nom {
my ($param1, $param2, @reste) = @_;
}
Le mot clé my est important lorsqu'on travaille avec des fonctions. S'il n'y est pas (il ne faut pas avoir un use strict), toutes les variables sont globables. Il est donc très facile de se marcher sur les pieds! Avec un my, la variable existe seulement à l'intérieur du bloc.
Retourner des valeurs :
sub nom {
my ($param1, $param2, @reste) = @_;
# ... bla-bla
return $out;
}
Il est également possible de retourner plus d'une valeur à la fois; on retourne alors une liste/un tableau :
sub nom {
my ($param1, $param2, @reste) = @_;
# ... bla-bla
return ($out1, $out2, $out3);
}
# ou encore
sub nom2 {
my ($param1, $param2, @reste) = @_;
# ... bla-bla
return @out;
}
Il y a plusieurs façons :
nomfonction 'param1', 'param2';
nomfonction('param1', 'param2');
&nomfonction;
nomfonction();
Perl est plein de fonctions intégrés, et possède encore plus de fonctions défini dans des modules. Laissons les modules de côtés pour le moment...
chmod, chown, stat, lstat