80 votes

Que fait shift() en Perl ?

Que peut bien signifier cette ligne ?

my $x = shift ;

68voto

cowgod Points 5330

shift() est une sous-routine Perl intégrée qui prend un tableau comme argument, puis retourne et supprime le premier élément de ce tableau. Il est courant d'obtenir tous les paramètres passés dans une sous-routine avec la commande shift appels. Par exemple, disons que vous avez une sous-routine foo qui prend trois arguments. Une façon d'obtenir que ces paramètres soient assignés à des variables locales est avec shift comme ça :

sub foo() {
  my $x = shift;
  my $y = shift;
  my $z = shift;
  # do something
}

La confusion ici est qu'il semble que l'on ne passe pas à shift un tableau comme argument. En fait, on lui passe implicitement le tableau "par défaut", qui est @_ à l'intérieur d'un sous-programme ou @ARGV en dehors d'un sous-programme.

15voto

Alnitak Points 143355

El shift supprime le premier élément d'un tableau et le renvoie. Le tableau est raccourci d'un élément.

Le tableau par défaut (s'il n'est pas donné en paramètre) est le suivant @_ si vous êtes dans une fonction, ou @ARGV si vous êtes au niveau du fichier.

Donc dans ce cas $x est soit défini comme le premier paramètre de la fonction, soit comme le premier paramètre de la ligne de commande.

10voto

Gaurav Points 1064

En Perl, de nombreuses méthodes utilisent les variables par défaut ( $_ y @_ ) si vous ne spécifiez pas explicitement des arguments. Votre code est identique à :

my $x = shift @_;

Comme l'a souligné PullMonkey plus tôt, dans un sous-programme, @_ contient les arguments passés à cette sous-routine (comme décrit dans la rubrique perlsub ). shift supprimera la valeur du premier argument de @_ et le stocker dans $x donc $_[0] va maintenant vous donner le deuxième transmis à votre sous-routine.

3voto

David Nehme Points 11564

C'est généralement un idiome pour : $x est une variable locale affectée au premier paramètre passé à la sous-routine, bien que.

my ($x) = @_;

est probablement plus claire (et elle ne modifie pas la liste des arguments).

3voto

mhd Points 1281

Dans un langage de profane, à partir d'une vue de très haut niveau, équipe prend le premier élément d'un tableau (la partie la plus à gauche), alors que l'inverse est pop qui prend le dernier élément du tableau (la partie la plus à droite).

my @array1=(5,6,7,8,9);
my $x = shift @array1;
print "$x\\n"; # 5
print "@array1\\n"; # 6 7 8 9

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X