Perl—sous-programmes—syntaxe de base

Document Sample
Perl—sous-programmes—syntaxe de base Powered By Docstoc
					Perl—sous-programmes—syntaxe 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 = foo($x, $y, @a);      # @a est simplement ignoré
  my $res = foo($x);              # $arg2 sera « undefined »
  my @b = (1, 2);
  $res = foo(@b);                 # Même chose que foo(1,2)!!!


                                Info III - 17.12.03              1
Perl—sous-programmes—déclarer les paramètres
  Pour préciser le nombre et le type des paramètres :
  sub foo($$\@) {
          my $arg1 = shift;
          my $arg2 = shift;
          my $arg3 = shift;        # le tableau est @$arg3, $$arg3[1]
          …
  }

  my $res = foo($x, $y);          # Erreur de compilation ici
  my $res = foo($x, $y, @a, $b) # Erreur de compilation ici
  my $res = foo($x, $y, @a);      # Ok
  # On peut aussi enlever les parenthèses si foo($$\@) est déclarée :
  my $res = foo $x, $y, @a;
                                Info III - 17.12.03                     2
Perl—sous-programmes—types 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”;
  \@     une référence à un tableau
         sub foo(\@) { my $aref = shift; …}
         foo @p;
  \%     une référence à un tableau associatif
         sub foo(\%) { my $href = shift; …}
         foo %p;

                           Info III - 17.12.03        3
Perl—références
  Utilisation d’une référence à un tableau :
  my @a; my $aref = \@a;
  @$aref;                     # le tableau lui-même
  $#$aref;                    # l’index du dernier élément
  $aref->[$i] ou $$aref[$i] # l’élément $i du tableau

  Utilisation d’une 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

                            Info III - 17.12.03              4
Perl—paramè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
           # n’a 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


                                 Info III - 17.12.03               5
Perl—nombre variable de paramètres
  On peut utiliser @ à la fin du prototype pour indiquer un
  nombre variable de paramètres :
  sub foo($$@) {
         my $a = shift;
         my $b = shift;
         my @rest = @_;        # le reste des paramètres
         foreach (@rest) { … }
         …
  }
  foo $a, $b; foo $a, $b, 1; foo $a, $b, 1, $x, @a;       # ok
  foo($a, $b); foo($a, $b, 1); foo($a, $b, 1, $x, @a);    # ok
  foo $a; foo($a); foo; foo();               # erreurs
                            Info III - 17.12.03                  6
Perl—sous-programmes—exemples
  Exemple extrait de « perldoc perlsub » :
  sub max (@) {
     my $max = shift(@_);
     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);
  }                                 Info III - 17.12.03   7
Perl—sous-programmes—utilisations
  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.




                          Info III - 17.12.03               8

				
DOCUMENT INFO
Shared By:
Stats:
views:28
posted:6/13/2010
language:French
pages:8