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 !


SommairePerl avancéOpérateurs (3)
précédent sommaire suivant
 

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.
Pour en savoir plus, vous avez la documentation sur vos postes :

  • perldoc perlop (sous Windows)
  • man perlop (Sous Linux ou MacOS)
  • perlop CPAN

Mis à jour le 29 juin 2011 djibril

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;  
}
équivaut à

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;
qui lui même équivaut à

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;

Mis à jour le 30 juin 2011 djibril

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

Mis à jour le 30 juin 2011 djibril

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 ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les 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 © 2017 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.

 
Responsable bénévole de la rubrique Perl : djibril -