Procédures


Comme beaucoup de bon languages de programmation, le Perl autorise la création de fonctions propres, appelées procédures. Elles peuvent être placées n'importe où dans le programme, mais il est plutôt préférable des les placer toutes au début ou à la fin. Une procédure a la forme suivante :

sub ma_procedure
{
	print "Procedure pas tres interessante\n";
	print "Qui effectue toujours la même chose.\n";
}
 

Cette forme est indépendante du nombre de paramètre que nous lui passons. Toutes les formes suivantes sont valables pour appeler une procédure (remarquez l'appel de la procédure avec le caractère & en préfixe) :

&ma_procedure;		# Appele la routine
&ma_procedure($_);	# Appele la routine avec 1 paramètre
&ma_procedure(1+2, $_);	# Appele la routine avec 2 paramètres


Paramètres

Dans les cas ci-dessus, les paramètres sont acceptables, mais ignorés. Quand on appéle la procédure, tous les paramètres passés sont stockés dans une variable spéciale @_ . Cette variable n'a absolument aucun rapport avec $_. L'exemple de procédure suivant affiche simplement la liste des informations passées à la procédure. Elle est suivie d'exemple d'utilisations.

In the above case the parameters are acceptable but ignored. When the subroutine is called any parameters are passed as a list in the special @_ list array variable. This variable has absolutely nothing to do with the $_ scalar variable. The following subroutine merely prints out the list that it was called with. It is followed by a couple of examples of its use.

sub affichage
{
	print "@_\n";
}
 
&affichage;("Roi", "soleil");	# Affiche "Roi soleil"
&affichage;("Tom", "et", "Jerry"); # Affiche "Tom et Jerry"
 

Exactement comme n'importe quel tableau, les éléments de @_ peut être atteind en utilisant les crochets:

sub Affiche_un_deux
{
	print "Votre premier argument était $_[0]\n";
	print "et $_[1] fut votre second second\n";
}
 

Encore une fois, on peut insister sur le fait que les variables scalaires $_[0] et $_[1] et n'ont accun rapport avec la variable scalaire $_, qui peut être utilisée sans problème.


Renvoi de valeurs

Le résultat d'une procédure est toujours la dernière variable évaluée. Par exemple, cette procédure renvoie le maximum de deux paramètres entrés.

sub maximum
{
	if ($_[0] > $_[1])
	{
		$_[0];
	}
	else
	{
		$_[1];
	}
}
 
$plus_grand = &maximum;(37, 24);	# Maintenant, $plus_grand = 37
 

La procédure &affiche_un_deux renvoie une valeur, en l'occurence 1. En effet, la procédure a exécuté avec succès une fonction print, et le résultat d'une fonction print est 1.


Variables locales

La variable @_ est locale à la procédure, tout come les $_[0], $_[1], $_[2], .... D'autres variables peuvent être locales aussi, et ceci est utile si vous voulez modifier leur contenu sans risque. La procédure suivante vérifie si une chaîne est contenue dans une autre, sans compter les espaces.

sub interieur
{
	local($a, $b);			# $a et $b sont locales
	($a, $b) = ($_[0], $_[1]);	# Affectation de valeurs
	$a =~ s/ //g;			# On enlève les espaces
	$b =~ s/ //g;			#   des variables locales
	($a =~ /$b/ || $b =~ /$a/);	# Est ce que $a est dans $b
					#   ou le contraire...?
}
 
&intérieur;("arretes", "poisson");		# vrai ;)
 

En fait, on peut réduire cette procédure par :

local($a, $b) = ($_[0], $_[1]);
 


Precedent Start