OVH Cloud OVH Cloud

Référence

2 réponses
Avatar
Nicolas
Bonjour,


Quelle différence y a-t-il entre :

${ $tab{ shift @_ } } = shift @_

et

${ $tab{ $_[0] } } = $_[0]

Nicolas.

--
Powered .~.
by Linux /V\ Enlever
------ // \\ Take off
solutions for /( )\ BULBA
smart penguins ^`~'^

2 réponses

Avatar
Paul Gaborit
À (at) Mon, 16 Jan 2006 17:45:23 +0100,
Nicolas écrivait (wrote):
Quelle différence y a-t-il entre :

${ $tab{ shift @_ } } = shift @_

et

${ $tab{ $_[0] } } = $_[0]


'shift' à un deux effets :
1- retourner le premier élément d'un tableau,
2- le supprimer du tableau (c'est là que réside la diffférence entre
vos deux lignes).

Donc :

${ $tab{ shift @_ } } = shift @_;

serait en fait équivalent à :

${ $tab{ $_[0] } } = $_[1];
shift @_;
shift @_;

et encore... Dans un cas comme celui-là, et bien que faisant du Perl
depuis presque 15 ans, je doute encore de l'ordre d'évaluation du
'shift'. Peut-être est-ce :

${ $tab{ $_[1] } } = $_[0];
shift @_;
shift @_;

Je vous laisse faire des tests pour en être sûr (perso, je triche un
peu car je connais la réponse)... et pour ne pas utiliser une telle
ligne (celle avec les deux 'shift') afin d'éviter à quelqu'un de se
reposer la question quand il relira votre code !

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Nicolas

2- le supprimer du tableau (c'est là que réside la diffférence entre
vos deux lignes).

Donc :

${ $tab{ shift @_ } } = shift @_;

serait en fait équivalent à :

${ $tab{ $_[0] } } = $_[1];
shift @_;
shift @_;


J'avais trop rapidement écrit ${ $tab{ $_[0] } } = $_[0]
Je voulais dire ${ $tab{ $_[0] } } = $_[1]

Je vous laisse faire des tests pour en être sûr (perso, je triche un
peu car je connais la réponse)... et pour ne pas utiliser une telle
ligne (celle avec les deux 'shift') afin d'éviter à quelqu'un de se
reposer la question quand il relira votre code !


Je posais pas la question sur si ça prend les arguments par la droite ou
par la gauche, ni de savoir ce qu'il reste dans le tableau, pusique de
toutes les façon on ne s'en sert plus après, mais de comprendre pourquoi
avec les mêmes argument passés à la sub dans un des deux tout est avalé
par le premier dépilage et qu'il ne reste rien pour le second.
Je ne saurais plus vous donner l'exemple qui avait posé le problème.

Merci. Nicolas.

--
Powered .~.
by Linux /V Enlever
------ // Take off
solutions for /( ) BULBA
smart penguins ^`~'^