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 !
Vous avez déclaré un objet $dupond comme membre de la classe Humain, très bien. Maintenant il faudrait pouvoir avoir accès aux différents champs le concernant (son nom, son prénom, son âge...). Souvenez-vous que $dupond est une référence vers une table de hachage, il faut donc utiliser l'opérateur flèche pour accéder à ses différents champs. Par exemple, pour accéder au champ age de $dupond, il faut faire :
Code perl : | Sélectionner tout |
$dupond->{age}
Code perl : | Sélectionner tout |
1 2 3 | $dupond->{tab}->[1]; #accède au second élément de @tab . Équivalent à $dupond->{tab}[1]; |
En Perl, une méthode n'est qu'une fonction recevant un premier paramètre un peu spécial. Une méthode d'instance recevra comme premier argument la référence vers l'objet sur lequel elle doit s'appliquer.
Supposons que cette référence pointe vers une table de hachage (c'est le cas la plupart du temps) et définissons une méthode defage permettant de définir l'âge de l'humain passé à cette méthode et de l'afficher :
Code perl : | Sélectionner tout |
1 2 3 4 5 6 | sub defage { my ($this, $age ) = @_; $this->{age} = $age; print ''$this->{prenom} $this->{nom} a $this->{age} ans''; } |
C'est pratiquement la même chose que pour appeler un constructeur ! Supposons que nous ayons créé un objet $dupond membre de la classe Humain via le constructeur associé. Si maintenant on veut appeler la méthode defage sur cet objet il suffit de taper :
Code perl : | Sélectionner tout |
$dupond->degafe(35);
On peut utiliser la fonction AUTOLOAD pour charger une méthode non définie. On peut s'en servir pour facilement générer des accesseurs et des mutateurs. Cela se fait ainsi :
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | sub AUTOLOAD { our $AUTOLOAD; return if $AUTOLOAD =~ /DESTROY/; # vérifie que la méthode n'est pas le destructeur my $this = shift; # $this contient une référence à l'objet courant my $champ = __PACKAGE__ . "::" . $AUTOLOAD; die "Champ invalide" unless exists $self->{$champ}; # vérifie que le champ existe if (@_) { $this->{$champ} = shift; } # on affecte la nouvelle valeur de champ à champ return $self->{$champ}; # retourne la valeur du champ considéré. } |
Code perl : | Sélectionner tout |
1 2 | $dupond->nom(); #retourne Dupond; $dupond->nom("Jean Dupond"); #affecte Jean Dupond à nom |
Les fermetures sont des puissants générateurs de fonctions pour peu que l'on boucle autour. On peut donc s'en servir pour générer des accesseurs/mutateurs du même type que ceux de la version AUTOLOAD :
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | foreach my $iteration ( "nom", "prenom", "age" ) { my $nomcomplet = __PACKAGE__ . "::$iteration"; no strict 'refs'; # pour l'instruction suivante *$nomcomplet = sub { my $this = shift; $this->{$iteration} = shift if (@_); return $this->{$iteration}; }; } |
Code perl : | Sélectionner tout |
1 2 | $dupond->nom(); # retourne Dupond; $dupond->nom("Jean Dupond"); # affecte Jean Dupond à nom |
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.