En Perl avant 5.10, vous pouvez dire
#!/usr/bin/perl
use strict;
use warnings;
my @a = qw/a b c d e/;
my $index;
for my $elem (@a) {
print "At index ", $index++, ", I saw $elem\n";
}
#or
for my $index (0 .. $#a) {
print "At index $index I saw $a[$elem]\n";
}
En Perl 5.10, vous utilisez de l'état pour déclarer une variable qui n'est jamais réinitialisé (contrairement à ceux de créer avec mon). Cela vous permet de garder l' $index
variable dans une moindre portée, mais peut conduire à des bugs (si vous entrez dans la boucle un deuxième temps, il sera toujours avoir la dernière valeur):
#!/usr/bin/perl
use 5.010;
use strict;
use warnings;
my @a = qw/a b c d e/;
for my $elem (@a) {
state $index;
say "At index ", $index++, ", I saw $elem";
}
En Perl 5.12 vous pouvez dire
#!/usr/bin/perl
use 5.012; #this enables strict
use warnings;
my @a = qw/a b c d e/;
while (my ($index, $elem) = each @a) {
say "At index $index I saw $elem";
}
Mais attention: vous il y a des restrictions à ce que vous êtes autorisé à faire avec des @a
lors de l'itération sur il avec each
.
Il ne vous aide pas maintenant, mais en Perl 6, vous serez en mesure de dire
#!/usr/bin/perl6
my @a = <a b c d e>;
for @a Z 0 .. Inf -> $elem, $index {
say "at index $index, I saw $elem"
}
L' Z
opérateur zip les deux listes ensemble (c'est à dire qu'il prend un élément de la première liste, puis un élément à partir de la deuxième, puis un élément à partir de la première, et ainsi de suite). La deuxième liste est un paresseux liste qui contient tous les entiers de 0 à l'infini (au moins théoriquement). L' -> $elem, $index
dit que nous sommes de prendre deux valeurs à la fois de la suite de la fermeture éclair. Le reste devrait paraître normal pour vous (sauf si vous n'êtes pas familier avec l' say
fonction à partir de 5.10 encore).