perl:fonctions
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
perl:fonctions [2009/03/15 00:43] – modification externe 127.0.0.1 | perl:fonctions [2013/03/12 23:40] (Version actuelle) – root | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Fonctions ====== | ||
+ | |||
====== 1. Déclaration ====== | ====== 1. Déclaration ====== | ||
Il y a plusieurs façons de déclarer et implémenter une fonction en Perl, mais en pratique une seule (la plus simple) est utilisée : | Il y a plusieurs façons de déclarer et implémenter une fonction en Perl, mais en pratique une seule (la plus simple) est utilisée : | ||
+ | <code perl> | ||
sub produit { | sub produit { | ||
my ($a, $b) = @_; | my ($a, $b) = @_; | ||
Ligne 7: | Ligne 10: | ||
return $a * b; | return $a * b; | ||
} | } | ||
+ | </ | ||
===== Nommage ===== | ===== Nommage ===== | ||
Ligne 15: | Ligne 19: | ||
Il est possible de déclarer un simple prototype de fonction, comme en C, mais cela est en général inutile. En effet, le compilateur de Perl utilise "2 passes": | Il est possible de déclarer un simple prototype de fonction, comme en C, mais cela est en général inutile. En effet, le compilateur de Perl utilise "2 passes": | ||
+ | <code perl> | ||
bonjour(" | bonjour(" | ||
| | ||
Ligne 21: | Ligne 26: | ||
print "Hello $text !\n"; | print "Hello $text !\n"; | ||
} | } | ||
+ | </ | ||
===== Appel ===== | ===== Appel ===== | ||
Quand il n'y a pas d' | Quand il n'y a pas d' | ||
+ | <code perl> | ||
my @cles = sort keys %hash; # Ou: sort(keys(%hash)); | my @cles = sort keys %hash; # Ou: sort(keys(%hash)); | ||
+ | </ | ||
La pratique consiste à utiliser les parenthèses à bon escient en favorisant la lisibilité : | La pratique consiste à utiliser les parenthèses à bon escient en favorisant la lisibilité : | ||
Ligne 47: | Ligne 55: | ||
Pour récupérer les paramètres en début de fonction, on utilise les fonctions de traitement de listes à notre disposition. Parmis les syntaxes les plus courantes, on trouve : | Pour récupérer les paramètres en début de fonction, on utilise les fonctions de traitement de listes à notre disposition. Parmis les syntaxes les plus courantes, on trouve : | ||
+ | <code perl> | ||
sub methode_a { | sub methode_a { | ||
my ($nb, $temps, $item) = @_; | my ($nb, $temps, $item) = @_; | ||
Ligne 58: | Ligne 67: | ||
... | ... | ||
} | } | ||
+ | </ | ||
**Note**: si votre fonction accepte plusieurs scalaires et une unique liste en arguments, passez la liste en dernier argument - l' | **Note**: si votre fonction accepte plusieurs scalaires et une unique liste en arguments, passez la liste en dernier argument - l' | ||
Ligne 64: | Ligne 74: | ||
Par défaut, les paramètres sont passés par référence. Cela signifie que les élements du tableau **@_** sont équivalents aux arguments passés à la fonction. Exemple : | Par défaut, les paramètres sont passés par référence. Cela signifie que les élements du tableau **@_** sont équivalents aux arguments passés à la fonction. Exemple : | ||
+ | <code perl> | ||
sub incremente { | sub incremente { | ||
$_[0]++; | $_[0]++; | ||
Ligne 71: | Ligne 82: | ||
incremente($a); | incremente($a); | ||
# $a vaut 6 | # $a vaut 6 | ||
+ | </ | ||
Si on veut obtenir un passage par copie (cas le plus courant), il suffit d' | Si on veut obtenir un passage par copie (cas le plus courant), il suffit d' | ||
+ | <code perl> | ||
sub n_incremente_pas { | sub n_incremente_pas { | ||
my $val = $_[0]; # Ou: my ($val) = @_; | my $val = $_[0]; # Ou: my ($val) = @_; | ||
Ligne 81: | Ligne 94: | ||
n_incremente_pas($a); | n_incremente_pas($a); | ||
# $a vaut 5 | # $a vaut 5 | ||
+ | </ | ||
**Note**: si une constante est passée à une fonction et que cette dernière tente de la modifier, une erreur aura lieu lors de l' | **Note**: si une constante est passée à une fonction et que cette dernière tente de la modifier, une erreur aura lieu lors de l' | ||
Ligne 92: | Ligne 106: | ||
Par défaut, une fonction Perl retourne la valeur de la dernière instruction évaluée, par exemple ici le résultat (booléen) du test : | Par défaut, une fonction Perl retourne la valeur de la dernière instruction évaluée, par exemple ici le résultat (booléen) du test : | ||
+ | <code perl> | ||
sub est_pair { | sub est_pair { | ||
$_[0] % 2 ====== 0; | $_[0] % 2 ====== 0; | ||
} | } | ||
+ | </ | ||
Il est bien entendu possible de rendre ce fait explicite, et surtout de pouvoir retourner une valeur depuis n' | Il est bien entendu possible de rendre ce fait explicite, et surtout de pouvoir retourner une valeur depuis n' | ||
+ | <code perl> | ||
sub est_pair { | sub est_pair { | ||
return $_[0] % 2 ====== 0; | return $_[0] % 2 ====== 0; | ||
} | } | ||
+ | </ | ||
**Note**: pour les fonctions dont la valeur de retour n'a pas de signification particulière, | **Note**: pour les fonctions dont la valeur de retour n'a pas de signification particulière, | ||
+ | <code perl> | ||
sub une_fonction { | sub une_fonction { | ||
... | ... | ||
1; | 1; | ||
} | } | ||
+ | </ | ||
Pour retourner une liste, il n'y a pas de surprise, et l' | Pour retourner une liste, il n'y a pas de surprise, et l' | ||
+ | <code perl> | ||
sub conjugue { | sub conjugue { | ||
my ($re, $im) = @_; | my ($re, $im) = @_; | ||
return ($re, -$im); | return ($re, -$im); | ||
} | } | ||
- | | + | |
my($cr, $ci) = conjugue($cr, | my($cr, $ci) = conjugue($cr, | ||
+ | </ | ||
===== Contextualisation ===== | ===== Contextualisation ===== | ||
Afin de pouvoir programmer des fonctions qui profitent de la sensibilité au contexte, comme décrit dans le chapitre sur les variables, on a à disposition une simple fonction : | Afin de pouvoir programmer des fonctions qui profitent de la sensibilité au contexte, comme décrit dans le chapitre sur les variables, on a à disposition une simple fonction : | ||
+ | <code perl> | ||
sub meteo { | sub meteo { | ||
... | ... | ||
Ligne 126: | Ligne 148: | ||
my @mensuel = meteo; | my @mensuel = meteo; | ||
my $moyenne = meteo; | my $moyenne = meteo; | ||
+ | </ | ||
Cette possibilité est très souvent utilisée par les fonctions qui renvoient des listes, pour également renvoyer une information " | Cette possibilité est très souvent utilisée par les fonctions qui renvoient des listes, pour également renvoyer une information " | ||
+ | <code perl> | ||
($sec, | ($sec, | ||
$now = localtime(); | $now = localtime(); | ||
+ | </ | ||
**Note**: il existe aussi le contexte //vide//, dans le cas où la fonction est appelée sans que sa valeur de retour soit utilisée (détectable par wantarray ====== undef). | **Note**: il existe aussi le contexte //vide//, dans le cas où la fonction est appelée sans que sa valeur de retour soit utilisée (détectable par wantarray ====== undef). | ||
- |
perl/fonctions.1237077782.txt.gz · Dernière modification : 2013/03/12 23:23 (modification externe)