Re: [SSFR] quel langage ?

[ Thread Index | Date Index | More debianworld.org/shellscript-fr Archives ]


Selon Marc Chantreux <marc.chantreux@xxxxxxxxxxx>:

> Sébastien Aperghis-Tramoni a écrit :
>
> >Parce que pour retourner une chaîne, on écrit :
> >
> >     $str = reverse "hello";
> >
> >ce qui est non seulement plus élégant, mais en plus bien plus explicite.
>
> mais faux ? je crois bien que reverse ne fonctionne qu'avec un tableau.
> Il faut donc splitter ta chaine.
>
> % perl -le 'print reverse "BABA"'
> BABA
>
> % perl -le 'print reverse split //,"BABA"'
> ABAB

C'est ton exemple qui est faux. reverse() se comporte différement en
fonction du contexte (scalaire ou liste), le premier pouvant se forcer
à l'aide du mot-clé "scalar" ou d'un "opérateur secret" comme le ver :

    $ perl -le 'print scalar reverse "hello"'
    olleh

    $ perl -le 'print ~~ reverse "hello"'
    olleh

La raison en est que print() fournit un contexte de liste. Dans le cas
d'une affectation, par contre, le contexte est déjà scalaire :

    $ perl -le '$str = reverse "hello"; print $str'
    olleh

De manière amusante, si on utilise reverse() sur une liste en contexte
scalaire, il renverse la liste et chaque élément, et concatène le tout :

    $ perl -le 'print scalar reverse qw(123 456)'
    654321

Comme l'indique la page de manuel (perldoc -f reverse),

    print scalar reverse <>

est un bon moyen d'avoir un tac(1) sur les systèmes ne disposant pas de
cette commande.

--
Sébastien Aperghis-Tramoni

Close the world, txEn eht nepO.



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/