suivant: Appel
monter: Les fonctions
précédent: Les fonctions
  Index
Les fonctions sont déclarées par le mot-clé sub, suivi par le
nom de la fonction, puis le bloc d'instructions correspondant, entre
accolades
Le script étant pré-compilé avant d'être interprété, la
définition de la fonction peut être effectuée indifféremment
avant ou après son appel. Il peut être nécessaire de les déclarer
avant (ou de faire une forward declaration à la C) si on
utilise le pragma use strict;
Les arguments sont passés dans le tableau @_ . On peut définir
des variables locales à la fonction grâce aux mots-clés local()
ou my().
Le mot-clé return existe, mais est optionnel. S'il n'est pas
présent, la fonction retourne la dernière valeur évaluée.
Voici un exemple :
sub factorielle
{
my $n = shift(@_);
# ou bien encore
# my $n = shift;
# puisque @_ est dans ce cas pris par defaut.
$n == 1 ? 1 : ( $n * &factorielle($n - 1) );
# équivalent à (notez le return implicite)
# if ($n == 1)
# {
# 1;
# }
# else
# {
# $n * &factorielle($n - 1);
# }
}
my doit être utilisé de préférence à local, car
my donne à la variable une étendue lexicale (lexical
scoping), i.e. la variable ne sera pas visible des routines
appelées ensuite. Ce n'est pas clair ? Un exemple aidera sûrement :
# On declare quelques fonctions...
sub f_local
{
local($foo) = "Foo";
&print_foo();
}
sub f_my
{
my($foo) = "Bar";
&print_foo();
}
# Affichage de la valeur de la variable $foo
sub print_foo
{
print $foo, "#762#>n";
}
# Début du script.
print "Appel avec local sans initialisation globale : ";
&f_local;
print "Appel avec my sans initialisation globale : ";
&f_my;
# Initialisation de la variable de manière globale
$foo = "Toto";
print "Appel avec local avec initialisation globale : ";
&f_local;
print "Appel avec my avec initialisation globale : ";
&f_my;
# Ce qui donne comme résultat a l'exécution :
Appel avec local sans initialisation globale : Foo
Appel avec my sans initialisation globale :
Appel avec local avec initialisation globale : Foo
Appel avec my avec initialisation globale : Toto
Ça va mieux ? Si la réponse est non, prenez une aspirine, faites-moi
confiance et facilitez-vous la vie en utilisant systématiquement
my.
suivant: Appel
monter: Les fonctions
précédent: Les fonctions
  Index
Olivier Aubert
1999-06-01
|