У меня есть код, который не работает так, как я ожидаю, и я был бы признателен за помощь в выяснении, как заставить его работать так, как я ожидаю.
Я бы хотелиспользуйте подпрограмму для изменения входного массива.Я подумал, что если я передам ссылку на массив, любые внесенные в него изменения будут отражены и в версии вызывающей стороны.Но, видимо, так не получается.
my @test_array = qw (zero one two three);
shift_array(\@test_array);
print "POST SUBROUTINE: $test_array[0]\n";
sub shift_array {
my @array = @{(shift)};
shift @array;
print "AFTER SHIFT IN SUB: $array[0]\n";
}
Это печатает:
AFTER SHIFT IN SUB: one
POST SUBROUTINE: zero
Я ожидал, что он напечатает one
оба раза.
Так что мойВопрос двоякий:
1) Почему он не ведет себя так, как мне кажется?Создает ли передача ссылки на массив копию массива?
2) Как мне получить ожидаемое поведение?Как я могу заставить подпрограмму выдвинуть один или несколько элементов с лицевой стороны копии вызывающего абонента входного массива?
Заранее благодарим за любые идеи, которые вы можете предложить.