У меня есть некоторый код, который работает не так, как я ожидаю, и я был бы признателен за помощь в выяснении того, как заставить его работать так, как я ожидаю.
Я хочу использовать подпрограмму для изменения входного массива. Я полагал, что если я передам ссылку на массив, любые внесенные в него изменения будут отражены и в версии вызывающего объекта. Но это, видимо, так не работает.
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)Как добиться того поведения, которое Я ОЖИДАЛ? Как мне получить подпрограмму для сдвига одного или нескольких элементов из передней части копии входного массива вызывающего абонента?
Заранее благодарим за любую информацию, которую вы можете предложить.