< < E-NEF > >
Prog. Perl | Art Roman | Voyager | Cartes ()
                  dragon                     e-nef                 Plan du Site
Contact
my.e-nef v0.1
  • Kernel Linux stable: 2.6
  • Perl: 5.8
  • Apache: 2.0
  • mod_perl: 2.0
  • postgres: 8.0


Rubriques


Recherche sur le Site





Bookmarks


Recommandation de Lecture


Questions ?
Dites nous ce que vous
avez pensé de cette page

 Excellent
 Vaut le coup de le lire
 Sans intérêt

 Pas assez technique
 Juste comme il faut
 Trop technique



Cours de Perl
next up previous index
suivant: Appel monter: Les fonctions précédent: Les fonctions   Index

Déclaration

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.


next up previous index
suivant: Appel monter: Les fonctions précédent: Les fonctions   Index
Olivier Aubert
1999-06-01



Publicité

© Copyright 1998-2010 Emmanuel PIERRE. Libre reproduction sous Licence LLDDv1.
Pour tout commentaire, webmaster@e-nef.com
Dernière MaJ 31/01/2018

Valid XHTML 1.0!

No Patents/