Flux rss

Perl - Les fonctions

La notion de fonction et de procédure

On appelle procédure un sous-programme qui permet d'effectuer un ensemble d'instruction par simple appel de la procédure dans le corps du programme principal. Les procédure permettent d'exécuter dans plusieurs parties du programme une série d'instructions, cela permet une simplicité du code et donc une taille de programme minimale.

Lorsqu'une procédure renvoie une valeur, on parle alors de fonction. D'autre part, une fonction peut faire appel à elle-même, on parle alors de fonction récursive (il ne faut pas oublier de mettre une condition de sortie au risque sinon de ne pas pouvoir arrêter le programme...).

La déclaration d'une fonction

Avant d'être utilisée, une fonction doit être définie car pour l'appeler dans le corps du programme il faut que l'interpréteur Perl la connaisse, c'est-à-dire qu'il connaisse son nom, ses arguments et les instructions qu'elle contient. La définition d'une fonction s'appelle "déclaration".
La déclaration d'une procédure se fait selon la syntaxe suivante :

sub Nom_De_La_fonction {
	liste d'instructions;

}

  • Le nombre d'accolades ouvertes (fonction, boucles et autres structures) doit être égal au nombre d'accolades fermées!
  • La même chose s'applique pour les parenthèses, les crochets ou les guillemets!

Une fonction s'écrira de la même façon, à la différence près qu'elle contiendra une instruction return (pour retourner une valeur bien évidemment...)

Voici un exemple de fonction en Perl :

sub Ma_Fonction {
print "Cette fonction ne sert a rien";

return 10;

}
Une fois cette étape franchie, votre fonction ne s'exécutera pas tant que l'on ne fait pas appel à elle quelque part dans le script!

Appel de fonction

Pour exécuter une fonction, il suffit de faire appel à elle en écrivant son nom (une fois de plus en respectant la casse) précédé du signe "&", suivi d'une parenthèse ouverte (éventuellement des arguments) puis d'une parenthèse fermante :

&Nom_De_La_fonction();

Remarques:

  • le point virgule signifie la fin d'une instruction et permet au navigateur de distinguer les différents blocs d'instructions
  • si jamais vous avez défini des arguments dans la déclaration de la méthode, il faudra veiller à les inclure lors de l'appel de la fonction (séparés par des virgules!)
    &Nom_De_La_fonction(argument1, argument2);

Les arguments d'une fonction

Il est possible de passer des arguments (appelés aussi paramètres à une fonction, c'est-à-dire lui fournir une valeur ou le nom d'une variable afin que la méthode puisse effectuer des opérations sur ces arguments ou bien grâce à ces arguments.
Le passage d'arguments à une fonction se fait au moyen d'un tableau spécial @_ contenant chacun des arguments passés à la fonction. Ainsi, lorsque l'on crée une fonction acceptant des paramètres, il suffit de stocker chacun des éléments du tableau dans des variables locales. Cela se fait à l'aide de la commande "My". Il est ainsi possible de parcourir l'ensemble des paramètres passés à la fonction à l'aide de l'instruction foreach, c'est-à-dire une instruction permettant de parcourir l'ensemble des enregistrements d'un tableau.

Voici un exemple de fonction admettant de nombreux arguments, et leur ajoutant "1" :

sub AjouteUn {
	my(@args) = @_;

	foreach $element (@args){
	$element .= '1';

	}
	return(@args);

}

Il existe une autre façon d'accéder aux paramètres de la fonction, celle-ci consiste à accéder individuellement à chacun des paramètres grâce à la variable tableau $_[]. Ainsi $_[0] désigne le premier élément du tableau. Voici un exemple de fonction admettant deux paramètres et retournant leur somme :

sub AjouteDeux {
	return $_[0] + $_[1];

}

Remarques:

  • il est possible de passer plus de paramètres que vous n'en utilisez (c'est inutile mais cela peut arriver par accident), c'est-à-dire que lorsque 3 arguments sont par exemple passés à la fonction, qui n'en utilise seulement 2, Perl ne déclenchera aucune erreur
  • si par contre le corps de la fonction fait appel à un paramètre non existant ($_[3]), Perl retournera une erreur précisant que l'index utilisé n'est pas défini, comme il le ferait pour un tableau auquel on accède à un élément inexistant...

Portée (visibilité) des variables

Selon l'endroit où on déclare une variable, celle-ci pourra être accessible (visible) de partout dans le code (elle est alors dite globale) ou bien que dans une portion confinée de celui-ci (variable locale), on parle de portée (ou visibilité) d'une variable.

Lorsque l'on déclare une variable n'importe où dans le code (à l'intérieur d'un bloc d'instructions (entre des accolades) ou bien en début de code), la variable sera globale par défaut. Il est donc essentiel de veiller à la visibilité des variables avec Perl.

Il est possible de rendre une variable locale grâce à la fonction My(). Celle-ci rend une variable visible dans le bloc où elle est définie et seulement celui-ci. La fonction My() s'utilise avec la syntaxe suivante :

$MaVariable = 2;

sub AjouteDeux {
my $MaVariable = 3;

	{
	print $MaVariable;	# Renvoie undef a l'ecran
	my $MaVariable = 4;

	print $MaVariable;	# Renvoie 4 a l'ecran
	}
print $MaVariable;		# Renvoie 3 a l'ecran
}

print $MaVariable;		# Renvoie 2 a l'ecran

Il est possible de rendre une variable locale visible dans tous les blocs contenus dans celui-ci, ainsi que dans toutes les fonctions appelées à l'intérieur de ce bloc grâce au mot-clé local :

$MaVariable = 2;

sub AjouteDeux {
local $MaVariable = 3;

	{
	print $MaVariable;	# Renvoie 3 a l'ecran
	my $MaVariable = 4;

	print $MaVariable;	# Renvoie 4 a l'ecran
	}
print $MaVariable;		# Renvoie 3 a l'ecran
}

print $MaVariable;		# Renvoie 2 a l'ecran

D'une manière générale il est préférable de donner des noms différents aux variables locales et globales pour des raisons de lisibilité et de compréhension du code...

Ce document intitulé « Perl - Les fonctions » issu de Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Résultats pour Perl Les fonctions

[perl] fonction arcsin ou asin (Résolu) Bonjour, je cherche a utiliser la fonction arcsin ou asin en perl... dois-je la créer , si oui comment?? sinon existe-t-elle?? merci on ne cesse jamais d'en apprendre www.commentcamarche.net/forum/affich-8469166-perl-fonction-arcsin-ou-asin
-PERL- Renommer photo en fonction fichier (Résolu) Bonjour, je souhaiterais mettre en place un bout de script perl. Voilà la situation : - j'ai un dossier trombinoscope avec les portraits des employés. Les noms des photos correspondent aux noms des personnes. - j'ai un fichier excel, avec 2... www.commentcamarche.net/forum/affich-6959972-perl-renommer-photo-en-fonction-fichier
Perl - Les fichiers La notion de filehandle On appelle filehandle (traduisez descripteur de fichier), dans un programme Perl, le nom permettant de manipuler une connexion d'entrée-sortie (les entrées-sorties standards vues précédemment sont connues par les filehandles... www.commentcamarche.net/contents/perl/perlfich.php3

Résultats pour Perl Les fonctions

[PHP] Fonction mail()La fonction mail() est bloquée chez certains des hébergeurs gratuits pour des raisons de sécurité (afin d'éviter le spam notamment), l'adresse ip de la machine qui a demandé le script sera alors indiquée dans le header 'X-MM-Mail-From-IP'. renseignez... www.commentcamarche.net/faq/sujet-117-php-fonction-mail
Faire fonctionner une application Windows sous Linux avec WineWine est un logiciel permettant de faire fonctionne certaines applications Windows sous Linux. Contrairement à VMWare ou VirtualBox, Wine n'émule pas un PC complet, mais seulement les API Win32 (appels système Windows). L'émulation n'est pas... www.commentcamarche.net/faq/sujet-9182-faire-fonctionner-une-application-windows-sous-linux-avec-wine

Résultats pour Perl Les fonctions

[Perl] Comparaison de caractères (Résolu)Bonjour à tous, j'ai un problème avec un script perl. Enfin lors d'une comparaison entre 2 chaines de caracteres visiblement identique, celle ci sont considérées comme étant différentes. Voici ma comparaison : $Compar = $BO{$cli}{$mod} cmp... www.commentcamarche.net/forum/affich-4088633-perl-comparaison-de-caracteres
[PERL] Recherche sous chaine de caractères (Résolu)Salut, J'ai récupéré le resultat d'une commande dans un fichier, et je souhaiterai extraire une partie du contenu de ce fichier. Or la chaine de caractere que je souhaite récupérér change à chaque fois, j'aurais donc voulu procéder de... www.commentcamarche.net/forum/affich-2794382-perl-recherche-sous-chaine-de-caracteres
Infecté par Trojan.Dropper et Win 32.Perlovga (Résolu)Bonjour, je suis infecté avec Trojan.Dropper.Small.APL et Win 32.Perlovga.A. Conséquence : j'ai des raccourcis qui ne fonctionnent plus, notamment vers un de mes disques durs. De plus qund j'allume l'ordinateur, j'ai un message... www.commentcamarche.net/forum/affich-2577053-infecte-par-trojan-dropper-et-win-32-perlovga

Résultats pour Perl Les fonctions

Télécharger JeditEditeur de texte capable de supporter la majeure partie des langages de programmation (perl,java,php,c,asp, etc.) et proposant des fonctionnalités avancées de coloration syntaxique, de support de l'Unicode, etc. www.commentcamarche.net/telecharger/telecharger-29-jedit

Résultats pour Perl Les fonctions

Le jeu vidéo de la semaine : Pokémons version Diamant et Perle(Paris - Relaxnews) - Les Pokémons sont de retour sur la Nintendo DS dès vendredi 27 juillet avec la sortie de nouvelles versions, Diamant et Perle.Dans la peau de Louka ou d'Aurore, le joueur devra trouver un maximum de Pokémon afin de combattre la... www.commentcamarche.net/actualites/le-jeu-video-de-la-semaine-pokemons-version-diamant-et-perle-3292885-actualite.php3

Résultats pour Perl Les fonctions

Les fonctions de l'API SocketLes fonctions des sockets en détail La fonction socket() La création d'un socket se fait grâce à la fonction socket() : int socket(famille,type,protocole) famille représente la famille de protocole utilisé (AF_INET pour TCP/IP utilisant une... www.commentcamarche.net/contents/sockets/sockfonc.php3
Perl - IntroductionHistoire de Perl Perl (Practical Extraction and Report Language) est un langage de programmation dérivé des scripts shell, créé en 1986 par Larry Wall afin de mettre au point un système de News entre deux réseaux. Il s'agit d'un langage interprété... www.commentcamarche.net/contents/perl/perlintro.php3
VBScript - Les fonctions mathématiquesLes fonctions mathématiques Fonction Description Abs(number) Retourne la valeur absolue d'un nombre. Atn(number) Retourne l'arc-tangente d'un... www.commentcamarche.net/contents/vbscript/vbs-fonctions-mathematiques.php3