Perl a deux contextes différents, un contexte scalaire et un contexte de liste. Un tableau '@_
', s'il est utilisé dans un contexte scalaire, renvoie la taille du tableau. Donc, étant donné ces deux exemples, le premier donne la taille du tableau @_
, et l'autre vous donne le premier élément.
my $string = @_ ;
my ($string) = @_ ;
Perl a trois 'par défaut' des variables $_
, @_
, et en fonction de qui vous demandez %_
. De nombreuses opérations utiliseront ces variables, si vous ne leur donnez pas de variable sur laquelle travailler. La seule exception est qu'aucune opération n'utilise actuellement par défaut %_
.
Par exemple, nous avons push
, pop
, shift
et unshift
, que tous acceptent un tableau comme premier paramètre. Si vous ne leur donnez pas de paramètre, ils utiliseront la variable 'default' à la place. De même que 'shift;
' est le même que 'shift @_;
'
De la façon dont les sous-programmes ont été conçus, vous ne pouviez pas dire formellement au compilateur quelles valeurs vous vouliez dans quelles variables. Eh bien, il était logique d'utiliser la variable de tableau 'default' '@_
' pour contenir les arguments.
Donc ces trois sous-programmes sont (presque) identiques.
sub myjoin{
my ($stringl, $stringr) = @_;
return "$stringl$stringr";
}
sub myjoin{
my $stringl = shift;
my $stringr = shift;
return "$stringl$stringr";
}
sub myjoin{
my $stringl = shift @_;
my $stringr = shift @_;
return "$stringl$stringr";
}
Je pense que le premier est légèrement plus rapide que les deux autres, parce que vous n'êtes pas en train de modifier la variable @_
.
Bonne réponse. Je ne pense pas que% _ soit jamais utilisé dans Perl, cependant. (Je veux dire, ce n'est jamais supposé et ce n'est pas une variable spéciale d'un autre type.) L'utilisateur peut l'utiliser, bien sûr, mais il n'enregistre même pas les frappes en tapant, par exemple, "keys" au lieu de "keys% _ ".) –
Je ne pense pas avoir jamais rencontré une fonctionnalité Perl intégrée qui utilisera% _, par défaut, mais elle est toujours considérée comme l'une des variables par défaut. Ou du moins, je pense que je me souviens d'avoir lu ça quelque part. –
Il n'y a pas de mot pour% _ en perlvar. Je ne l'ai vu nulle part durant mes nombreuses années de pratique professionnelle en perl. –