Pourquoi n'y a-t-il aucun avertissement pour la redéclaration de $i
dans le code suivant?Pourquoi ne reçois-je pas d'avertissement lorsque je redéclare la variable de contrôle Per foreach?
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
for my $i (1..3) {
my $i = 'DUMMY';
print Dumper $i;
}
Votre deuxième exemple est pas du tout la même chose que la première, à cause de la portée différente, ainsi que l'itérateur de boucle étant aliasé aux éléments du tableau (ce qui signifie que si vous changez $ i dans la boucle, vous allez changer votre tableau, ou générer un avertissement si les éléments sont constants). – Ether
ils sont tous les deux dans la même portée du bloc for alors que vos exemples sont tous les deux dans des portées différentes. –
L'aliasing dans le deuxième exemple fonctionne comme prévu, essayez-le vous-même: my @a = (1 .. 3); {my $ i; pour $ i (1 .. 3) {$ i = 'x'; }} imprime "a: @a"; Comme pour être dans le même cadre: comme le montre la question, la déclaration dans l'expression for n'est clairement pas dans la même portée que la déclaration dans le bloc interne. – willert