Les fonctions

En Perl la définition d'une fonction est simple. A chaque fois on retrouve la structure suivante :

sub NomDeFonction{

...

}.

Exemple de programme :

$AireDuCercle = Aire(56);
print "$AireDuCercle\n";

sub Aire{
      $rayon = $_[0];
      return ( 3.1415 * ($rayon ** 2) );
}

Le passage des paramètres

Tout les paramètres sont passés à la fonction via le vecteur @_. On a accès au nombre de paramètres en assignant @_ à un scalaire, les éléments du vecteurs sont accessibles soit par leurs références $_[x] ou en assignant un vecteur dédié dans la fonction. La modification de la référence d'un paramètre entraîne sa modification dans la suite du programme. 

Les scripts suivant illustrent ces notions. 

argu(1,2,3);
argu("bla");
argu(1..19);

sub argu{
     $nombre = @_;
     print "Nombre d\'arguments : " . $nombre;
}


aire_rect(5,6);
aire_rect(6,8);

sub aire_rect{
              ($largeur, $longueur) = @_;
              $aire = $largeur * $longueur;
              print "surface : $aire\n";
}


@vecteur = (1..5);
print "Avant l\'appel à la fonction \@vecteur = @vecteur\n";
fonction(@vecteur);
print "Après l\'appel à la fonction \@vecteur = @vecteur\n";

sub fonction{
          $_[0] ="A";
          $_[3] ="B";
}
         
La portée des variables

Il est possible de contrôler la portée des variables à l'aide des fonctions my() et local(). Une variable my ne porte que dans la fonction elle-même, une variable locale porte sur la fonction où elle est déclarée et les fonctions qui sont appelées à l'intérieur de cette fonction.

Le script suivant illustre ces notions :

fonction("AAAA","BBBB");

sub fonction{
      local( $var1)=$_[0];
      my($var2)=$_[1];

      print ("Dans fonction : \$var1 = $var1\n");
      print ("Dans foncton : \$var2 = $var2\n");

      sous_fonction();

      print ("Dans fonction : \$var1 = $var1\n");
      print ("Dans foncton : \$var2 = $var2\n");
}

sub sous_fonction{
     print ("Dans sous_fonction : \$var1 = $var1\n");
     print ("Dans sous_foncton : \$var2 = $var2\n");

     $var1 = "CCCC";
     $var2 = "DDDD";

     print ("Dans sous_fonction : \$var1 = $var1\n");
     print ("Dans sous_foncton : \$var2 = $var2\n");
}

Les fonctions privées    

Une fonction privée est une fonction déclarée dans le corps d'une autre fonction et uniquement accessible à l'intérieur de celui-ci. 

Voici un exemple d'utilisation d'une fonction privée.

$res = pyth(10,10);
print("\$res = $res\n");

sub pyth{
      ($var1, $var2) = @_;

      $carre = sub{
                          return($_[0] ** 2);
                    };

       return(&$carre($var1) + &$carre($var2));
}


suite-index