Проблема заключается в том, что дополнительный вызов расширяет переменную до списка значений, которые передаются в подпрограмму.Т.е. передается копия, а не сама переменная.Ваш дополнительный вызов равен:
changeThis(11, 12);
Если вы хотите изменить исходный массив, вместо него передайте ссылку:
use strict;
use warnings;
my @it = (10,11);
changeThis(\@it);
print join(" ", @it),"\n";
sub changeThis{
my $array = shift;
$$array[2] = 12;
}
Кроме того, @_[2]
выдаст вам предупреждение:
Scalar value @_[2] better written as $_[2]
Если вы use warnings
, что, конечно, следует.Нет веских оснований не включать предупреждения и строгие правила, если вы точно не знаете, что делаете.