Единственная разница между этими циклами:
foreach (@array) { ... }
foreach my $var (@array) { ... }
- это переменная цикла. Псевдоним является функцией foreach
, а не неявной переменной $_
. Обратите внимание, что это псевдоним (другое название для той же вещи), а не ссылка (указатель на вещь).
В простом (и обычном) случае вы можете отключить псевдоним, сделав копию:
foreach my $var (@array) {
my $copy = $var;
# do something that changes $copy
}
Это работает для обычных скалярных значений. Для ссылок (или объектов) вам потребуется сделать глубокую копию, используя Storable или Clone , что может быть дорогостоящим. Связанные переменные также проблематичны, perlsyn рекомендует полностью избегать ситуации.