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 !
Depuis la version Perl 5.12, un nouvel opérateur a vu le jour : l'opérateur yada-yada dont la syntaxe est trois petits points ...
Cet opérateur est aussi appelé "Whatever operator", "yada-yada operator" ou "et cetera operator".
C'est un marqueur très pratique qui permet de dire à Perl qu'il reste du code à écrire. Ainsi, lorsque Perl rencontre ce marqueur, il lance une exception dont le texte est le suivant : Unimplemented at /home/djibril/test.pl line xx. Il ne faut pas confondre cet opérateur avec un autre d'un nom aussi marrant "opérateur flip-flop".
Voici un exemple d'utilisation de yada-yada.
Vous avez un programme à concevoir, ce dernier contient plusieurs méthodes ou procédures. Si vous avez commencé à concevoir une procédure lister_fichiers, mais que vous ne l'avez pas terminée, vous pouvez y insérer ce marqueur. Ainsi, si vous faites appel à cette procédure accidentellement, Perl vous le signalera.
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #!/usr/bin/perl use warnings; use 5.12.0; afficher_bonjour('CLaudeLeLoup'); lister_fichiers('C:/'); afficher_bonjour('perl'); sub afficher_bonjour { my ($prenom) = @_; say "Bonjour $prenom"; } sub lister_fichiers { my @arguments = @_; say "Procedure : lister_fichiers"; # implémentation inachevée ... } |
Code : | Sélectionner tout |
1 2 3 | Bonjour CLaudeLeLoup Procedure : lister_fichiers Unimplemented at C:\Documents and Settings\user\Bureau\test.pl line 23. |
- perldoc perlop (sous Windows)
- man perlop (Sous Linux ou MacOS)
- perlop CPAN
Depuis Perl 5.10, il existe un opérateur provenant de Perl 6 s'appelant defined-or. Il est très pratique car permet d'écrire en peu de lignes une affectation de valeur par défaut. Vous allez rapidement comprendre en lisant un exemple.
Le code suivant :
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 | #!/usr/bin/perl use warnings; use strict; my $prix; my ($prix1, $prix2) = (1000, 2000); if ( defined $prix1 ) { $prix = $prix1; } else { $prix = $prix2; } |
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 | #!/usr/bin/perl use warnings; use strict; my $prix; my ($prix1, $prix2) = (1000, 2000); $prix = defined $prix1 ? $prix1 : $prix2; |
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 | #!/usr/bin/perl use warnings; use strict; my $prix; my ($prix1, $prix2) = (1000, 2000); $prix = $prix1 // $prix2; |
Depuis Perl 5.10, il existe un opérateur de comparaison nommé smart match dont la notation est : ~~
Il permet de comparer génériquement tout et n'importe quoi. C'est un opérateur booléen commutatif ($a ~~ $b équivaut à $b ~~ $a) très puissant importé de Perl 6. Son comportement dépend des arguments à comparer.
$a | $b | Type de correspondance | Code équivalent |
Hash | Hash | Clefs de hash identiques (toutes les clefs sont trouvées dans les deux hash) | |
Hash | Tableau | Intersection des clés du hash | grep { exists $a->{$_} } @$b |
Hash | CodeRef | sub truth for each key[1] | !grep { !$b->($_) } keys %$a |
Hash | Regex | hash key grep | grep /$b/, keys %$a |
Any | Hash | Existence d'une entrée de hash | exists $b->{$a} |
Any | undef | Non définie | !defined $a |
Any | Object | invokes ~~ overloading on $object, or dies | |
Any | Tableau | match contre un élément du tableau | |
Any | Regex | pattern match | $a =~ /$b/ |
Any | Num | égalité numérique | $a == $b |
Any | CodeRef | scalar sub truth | $b->($a) |
Any | Any | égalité des scalaires | $a eq $b |
Tableau | Tableau | Tableau compatible | |
Tableau | Hash | Intersection des clés du hash | grep { exists $b->{$_} } @$a |
Tableau | CodeRef | sub truth for each elt [1] | !grep { !$b->($_) } @$a |
Tableau | Regex | grep de tableau | grep /$b/, @$a |
Regex | Hash | grep clef de hash | grep /$a/, keys %$b |
Regex | Tableau | grep de tableau | grep /$a/, @$b |
undef | Hash | always false (undef can't be a key) | |
undef | Tableau | Tableau contenant un undef | grep !defined, @$b |
undef | Any | Non définie | !defined($b) |
[1] - Les listes et listes associatives matcheront.
Voici un exemple de programme :
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #!/usr/bin/perl use warnings; use strict; use 5.10.0; my @fruits = qw< pomme orange kiwi fraise >; my %personnes = ( 'paris' => '75', 'rennes' => '35', 'reims' => '51', 'lyon' => '69', ); my $ref_hash = \%personnes; my @villes = qw / paris rennes reims lyon/; my $nombre1 = 12.35; my $nombre2 = 12.35000; if ( %personnes ~~ @fruits ) { print "\%personnes et \@fruits identiques\n"; } if ( %personnes ~~ @villes ) { print "\%personnes et \@villes identiques\n"; } if ( %personnes ~~ $ref_hash ) { print "\%personnes et \$ref_hash identiques\n"; } if ( @villes ~~ @fruits ) { print "\@villes et \@fruits identiques\n"; } if ( $nombre1 ~~ $nombre2 ) { print "\$nombre1 et \$nombre2 identiques\n"; } |
Code : | Sélectionner tout |
1 2 3 | %personnes et @villes identiques %personnes et $ref_hash identiques $nombre1 et $nombre2 identiques |
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.