1Info III Perlsous-programmessyntaxe de base sub foo { my $arg1 = shift; my $arg2 = shift; # do stuff with $arg1, $arg2,…, compute $result. return $result; } my $res = foo($x, $y); my $res = est simplement ignoré my $res = foo($x);# $arg2 sera « undefined » = (1, 2); $res = Même chose que foo(1,2)!!!
2Info III Perlsous-programmesdéclarer les paramètres Pour préciser le nombre et le type des paramètres : sub { my $arg1 = shift; my $arg2 = shift; my $arg3 = shift; # le tableau $$arg3[1] … } my $res = foo($x, $y);# Erreur de compilation ici my $res = foo($x, $b)# Erreur de compilation ici my $res = foo($x, Ok # On peut aussi enlever les parenthèses si est déclarée : my $res = foo $x,
3Info III Perlsous-programmestypes de paramètres Les types de paramètres suivants sont possibles : $une variable scalaire sub foo($) { my $a = shift; …} foo $p; foo 3; foo asdf; référence à un tableau sub { my $aref = shift; …} \%une référence à un tableau associatif sub foo(\%) { my $href = shift; …} foo %p;
4Info III Perlréférences Utilisation dune référence à un tableau : my $aref le tableau lui-même $#$aref;# lindex du dernier élément $aref->[$i] ou $$aref[$i]# lélément $i du tableau Utilisation dune référence à un tableau associatif : my %h; my $href = \%h; %$href;# le tableau associatif $href->{$key} ou $$href{$key} # lélément $key de %h
5Info III Perlparamètres optionnels On peut utiliser ; pour séparer les paramètres optionnels : sub foo($$;$) { my $a = shift; my $b = shift; my $option = shift; # $option est « undefined » si le troisième paramètre # na pas de valeur $option = 0 if ! defined $option; # valeur par défaut … } foo $a, $b;foo $a, $b, 1;# ok foo $a;foo $a, $b, 1, 2;# erreurs
6Info III Perlnombre variable de paramètres On peut à la fin du prototype pour indiquer un nombre variable de paramètres : sub { my $a = shift; my $b = shift; le reste des paramètres foreach { … } … } foo $a, $b; foo $a, $b, 1; foo $a, $b, 1, ok foo($a, $b); foo($a, $b, 1); foo($a, $b, 1, ok foo $a; foo($a); foo; foo(); # erreurs
7Info III Perlsous-programmesexemples Exemple extrait de « perldoc perlsub » : sub max { my $max = foreach $foo { $max = $foo if $max < $foo; } return $max; } $bestday = max($mon,$tue,$wed,$thu,$fri); Exemple récursif : sub factoriel ($) { my $n = shift; return 1 if $n <= 1; return $n * factoriel($n-1); }
8Info III Perlsous-programmesutilisations On se sert de sous-programmes en Perl pour les mêmes raisons que dans les autres langages de programmation : Modularité du code Fonctions souvent utilisées Éviter la répétition du même code Récursivité etc.