FAQ PerlConsultez toutes les FAQ
Nombre d'auteurs : 18, nombre de questions : 250, dernière mise à jour : 29 octobre 2015 Ajouter une question
Bienvenue sur la FAQ Perl. Cette FAQ a pour vocation de vous enseigner ou de vous faire revoir les notions élémentaires de ce fantastique langage. Perl est très utilisé dans différents domaines depuis la gestion système, le réseaux, l'administration de bases de données, le web (CGI), la bureautique, la conception d'interfaces graphiques ou des contextes scientifiques telle la bioinformatique. Nous espérons que cette FAQ vous sera d'une grande utilité.
Vous souhaitez participer à l'amélioration de cette FAQ, n'hésitez pas !! Commentez
Bonne lecture !
Un objet se construit à l'aide d'une fonction spéciale appelée constructeur. C'est une méthode de classe, elle recevra donc pour premier argument le nom de la classe à laquelle appartient l'objet. En Perl, un objet est un référent, qui est la plupart du temps une table de hachage. Pour déclarer ce référent comme un objet, on utilise la fonction bless (que l'on pourrait traduire "consacrer" en français) en lui passant comme argument la référence vers l'objet et le nom de la classe de l'objet (donc le nom du module contenant le constructeur). Cette fonction va lier la référence à la classe pour ensuite retourner la référence consacrée. Ainsi, l'objet "saura" à quelle classe il appartient. Un petit exemple vaut mieux qu'un long discours :
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 | Package Classe1; use strict; sub constructeur { my ($classe) = @_; #la fonction reçoit comme premier paramètre le nom de la classe my $this = {}; #référence anonyme vers une table de hachage vide bless ($this,$classe); #lie la référence à la classe return $this; #on retourne la référence consacrée } 1; #indique la fin du module |
Pour invoquer des méthodes en Perl, on utilise l'opérateur flèche qui s'écrit comme ceci : ->. La syntaxe d'invocation est celle-ci :
Code perl : | Sélectionner tout |
invoquant->méthode(paramètres);
Code perl : | Sélectionner tout |
my $obj1 = Classe1->constructeur();
C'est facile ! Dans le constructeur on crée une référence anonyme vers une table de hachage. Cette table n'est pas nécessairement (et ne devrait pas être) vide ! Reprenons l'exemple de la classe humain. On veut que notre humain ait un nom et un âge. Voici le constructeur qui permet de faire ça :
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 | Packge Humain; use strict; sub constructeur { my ($classe) = @_; #la fonction reçoit comme premier paramètre le nom de la classe my $this = {''nom'' => ''Dupond'', ''age'' => 35}; #initialise les variables nom et age bless ($this,$classe); #lie la référence à la classe return $this; #on retourne la référence consacrée } 1; |
Le constructeur est une fonction, il ne reçoit pas forcément un seul paramètre. Ainsi si l'on veut définir l'âge et le nom de l'humain que l'on va créer lors de l'appel du constructeur, il suffit de lui passer comme argument ces deux données :
Code perl : | Sélectionner tout |
1 2 | # Appel du constructeur : my $dupond = Humain->constructeur("Dupond",35); |
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 | sub constructeur { my ($classe, $nom, $age) = @_; my $this = {''nom'' => $nom, ''age'' => $age}; #initialise les variables nom et age bless ($this,$classe); #lie la référence à la classe return $this; #on retourne la référence consacrée } |
Un destructeur est une méthode particulière d'une classe. Elle sera invoquée à chaque fois que plus aucune référence ne pointera vers l'objet à détruire. Si par exemple vous avez créé une référence $dupond vers un objet et que vous affectez à $dupond la valeur undef, plus aucune référence ne pointera vers l'objet $dupond et le destructeur sera appelé car $dupond ne sera plus accessible par aucun moyen. Le destructeur sert à détruire un objet correctement.
En Perl, le destructeur est une méthode d'instance nommée DESTROY. Exemple de destructeur.
Code perl : | Sélectionner tout |
1 2 3 4 5 6 | #Dans le module Humain sub DESTROY { my ($this) = @_ print "L'objet $dupond->{nom} va être détruit !"; } |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.