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 : (modification externe)
