gpt4 book ai didi

perl - 在子程序中修改数组

转载 作者:行者123 更新时间:2023-12-03 22:30:28 26 4
gpt4 key购买 nike

我有一些代码不能按我期望的方式工作,如果您能帮助我弄清楚如何让它按我期望的方式工作,我将不胜感激。

我想使用子程序来修改输入数组。我想,如果我传入对数组的引用,我对它所做的任何更改也会反射(reflect)在调用者的版本中。但它显然不是那样工作的。


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";
}

这打印:

SUB 换档后:1
后子程序:零

我预计它会打印 one两次。

所以我的问题有两个方面:

1)为什么它的行为不像我认为的那样?传递对数组的引用是否会创建数组的副本?

2)我如何获得我期望的行为?我如何获得一个子例程以将一个或多个元素从输入数组的调用者副本的前面滑出?

预先感谢您提供的任何见解。

最佳答案

因为 my @array是一个新数组,您将取消引用的原始数组分配给它。这是一个副本。

而是这样做:

sub shift_array {
my $array = shift;
shift( @$array );
}

编辑:我最初说取消引用它会产生问题,但使用 @$array仍在取消引用它。正如@mob 指出的那样,分配变量是创建新数组而不是更新现有引用的原因。

关于perl - 在子程序中修改数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9995856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com