Que peut bien signifier cette ligne ?
my $x = shift ;
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.
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.
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.
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 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.