gpt4 book ai didi

perl - 为什么 Perl 的 for() 不遍历数组中的所有元素?

转载 作者:行者123 更新时间:2023-12-01 04:52:14 25 4
gpt4 key购买 nike

有一个 perl 脑筋急转弯:

my @l = ('a', 'b', 'c');
for (@l) {
my $n = 1;
print shift @l while (@l and $n --> 0);
print "\n";
}

印的是什么?应该是a、b、c吧?但是等等,实际上某个地方有一个错误,它只打印 a 和 b。可能只是一些愚蠢的脱单,应该很容易解决吧?

好的,所以做一个小的代码更改来测试一下并将@l 更改为
my @l = ('a', 'b', 'c', 'd');

印的是什么?可能是因为 a、b 和 c 是因为那个愚蠢的一个,对吧? ...等一下,实际上它仍然只打印 a 和 b。好的,所以错误在于它只打印前两个字符。

再次将@l 更改为
my @l = ('a', 'b', 'c', 'd', 'e');

嗯,现在它打印 a、b 和 c。但不是 d 或 e。事实上,我们从现在开始每添加 2 个字母,它就会打印序列中的下一个字母。因此,如果我们添加 f,它仍然只会打印 a、b 和 c,但是如果我们添加 f 和 g,它将打印 a、b、c 和 d。

对于不同的 $n 值,这种情况也会发生类似的结果。

那么这里发生了什么?

最佳答案

Dave Webb解决了我的问题,但这里引用了 perldoc perlsyn 说不要这样做:

If any part of LIST is an array, foreach will get very confused if you add or remove elements within the loop body, for example with splice. So don't do that.



请注意,在本文前面, foreach 的语法被描述为 foreach LIST ,这是 LIST他们在文档中提到。另请注意 foreachfor是等价的。

关于perl - 为什么 Perl 的 for() 不遍历数组中的所有元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2014603/

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