【发布时间】:2012-04-17 06:14:33
【问题描述】:
我有一些代码不能按我预期的方式工作,如果能帮助我弄清楚如何让它按我预期的方式工作,我将不胜感激。
我想使用子程序来修改输入数组。我想如果我传入对数组的引用,我对它所做的任何更改也会反映在调用者的版本中。但它显然不是那样工作的。
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";
}
打印出来:
换班后:一 发布子程序:零我预计它会打印两次one。
所以我的问题有两个:
1) 为什么它的行为不像我认为的那样?传递对数组的引用会创建数组的副本吗?
2) 我如何获得我所期望的行为?如何让子例程从调用者的输入数组副本的前面滑出一个或多个元素?
提前感谢您提供的任何见解。
【问题讨论】:
标签: perl