Developpez.com

Le Club des Développeurs et IT Pro

Connaissez-vous les huits opérateurs Perl secrets ?

Si ce n'est pas le cas, découvrez-les ici

Le 2009-12-01 11:26:45, par Gordon Fowler, Expert éminent sénior
Les opérateurs Perl sont des symboles qui permettent de manipuler des variables (pour faire des opérations, les évaluer, etc.). Il en existe de plusieurs types (assignation, incrémentation, comparaison de scalaires ou de chaînes, etc.). Mais il y a un type d'opérateur que beaucoup de développeurs Perl ne doivent pas connaître : les opérateurs secrets.

Ces opérateurs Perl secrets sont au nombre de 8.

En fait, pour plus de rigueur, il convient de préciser qu'un seul est vraiment un opérateur ; les autres sont plus assimilables à des tours de passe-passe syntaxiques.

Cet opérateur secret se nomme le Spaceship Operator (que l'on pourrait abusivement traduire par "l'opérateur de l'espace" :

Code :
<=>
Ce "vaisseau spatial" est habituellement utilisé pour trier une liste de nombres. Il y a cependant une fonction cachée.

Si vous ne pécifiez pas "<=>" entre les parenthèses de la fonction sort( ), alors la liste de nombres sera traitée comme une chaîne de caractères. En clair, elle sera triée selon l'ordre ASCII.

Les autres opérateurs secrets se nomment l'Eskimo Greeting Operator (le Baiser de l'Eskimo), le Goatse Operator, (en rapport avec le "shock site" Goatse.cx... je vous laisse découvrir pourquoi - NB : lien Wikipedia), le Turtle Operator (la Tortue), le Inchworm Operator (le Ver de Terre) ou le Inchworm-On-A-Stick Operator (le Ver de Terre sur un Bâton).

Sans oublier les deux autres métaphores spatiales : le Spacestation Operator et le Venus Operator.

Tous ces opérateurs secrets sont à découvrir sur le blog de Peteris Krumins, un informaticien Lituanien de 23 ans.

Comme quoi il peut être vrai que la valeur n'attend pas le nombre des années.

Pour mémoire une vidéo de 40 minutes sur les opérateurs secrets de Perl 5 est disponible aussi bien en visionnage qu'en téléchargement.

Lire aussi :

Les rubriques (actu, forums, tuto) de Développez.com :
Langages
Perl

Les programmeurs en Perl seraient les plus malpolis, avec l'emploi de gros mots dans leurs travaux
Fedora 12 arrive avec Perl 6 : la distribution Linux espère ainsi attirer les développeurs

Et vous ? :

Connaissiez-vous déjà ces opérateurs Perl "secrets" ?
  Discussion forum
7 commentaires
  • djibril
    Responsable Perl et Outils
    Il existe déjà une vidéo de 40 minutes disponible sur ce sujet en français. Cette vidéo provient de la journée Perl 2009.

    En plus de sa floppée d'opérateurs standards, Perl dispose d'opérateurs SECRETS. Ceux-ci ont été découverts par des golfeurs et des assombrisseurs pendant leur inlassable recherche de concision et d'inintelligibilité.

    Cette présentation décrira les principaux de ces opérateurs, qui répondent aux doux noms de Venus, inchworm ou encore baby cart...

    Je présenterai également quelques constantes secrètes de Perl.

    Intervenant : Philippe Bruhat (&#8206;BooK&#8206
  • Gordon Fowler
    Expert éminent sénior
    Merci beaucoup pour l'info !

    J'ai rajouté ton lien à la fin de l'article.

    Très cordialement,

    Gordon
  • djibril
    Responsable Perl et Outils
  • viking1404
    Membre régulier
    Je ne connaissais pas ces opérateurs. Je les trouve jolis, si je puis dire.
    C'est pour ce genre fantaisies que j'aime le perl ^^

    Juste deux questions : Avec la "réforme" de perl 6, est-ce que ces opérateurs sont toujours valables ?
    J'avais cru comprendre que les créateurs de perl voulaient "éliminer" ce genre de choses ?
  • psylox
    Membre actif
    ~~ est aussi un opérateur avec perl 5.10, il permet de vérifier si une valeur est dans un tableau
    cf: Perl 5.10 release

    Peut-on vraiment dire que ce sont des opérateurs "secret"? je ne pense pas il s'agit juste d'une utilisation très poussée des possibilités du language

    EDIT:
    J'ai cependant trouvé cela très interressant, merci pour la news
  • vintz72
    Membre averti
    Cet article montre à quel point le Perl peut être puissant tout en étant concis. Le revers de la médaille étant que le code produit est illisible pour qui ne connait pas à fond le langage...
  • Jedai
    Expert éminent
    Envoyé par psylox
    ~~ est aussi un opérateur avec perl 5.10, il permet de vérifier si une valeur est dans un tableau
    Oh il permet bien plus que ça, c'est un opérateur de "smart-match" qui adapte son comportement aux types de paramètres fourni, par exemple string ~~ regex va utiliser =~, scalar ~~ sub va appliquer la sub au scalar et évaluer la valeur de vérité du résultat, etc...C'est pratique mais à utiliser avec précaution et uniquement dans des cas où le comportement est évident.

    Envoyé par viking1404
    Juste deux questions : Avec la "réforme" de perl 6, est-ce que ces opérateurs sont toujours valables ?
    J'avais cru comprendre que les créateurs de perl voulaient "éliminer" ce genre de choses ?
    Je ne sais pas où tu as entendu ça, peut-être que ce qu'il voulait dire c'était que Perl6 serait à la fois plus riche et plus régulier et qu'il n'y aurait donc pas besoin d'opérateurs "secrets". En tout cas avec ses méta-opérateurs, ses opérateurs infixes, préfixes, suffixes, ..., ses jonctions, ses règles d'associativité à gauche, à droite, de chaîne et de liste, on ne peut pas dire que Perl6 sera plus faible niveau opérateur que Perl5 !!
    Juste pour donner un exemple, le méta-opérateur [.] et l'associativité de chaîne permettent facilement de tester si une liste est rangée en ordre croissant :
    Code :
    1
    2
    3
    4
    5
    6
    if( [<] @nums ) {
      say "This list is strictly increasing.";
    } 
    else {
      say "It is not !";
    }
    ("[*] (1, 3, 4, 5)" <=> "1 * 3 * 4 * 5", et "1 < x < 5" <=> "1 < x and x < 5"

    --
    Jedaï