我正在阅读 Llama ( Learning Perl ) 书,并正在做练习。对于这个练习:
好吧,我已经想出了一个更简单的方法(我记得你可以在数组上使用 reverse
...... Perl 是如此......到目前为止很棒),但我想知道为什么这个方法不起作用。
#!/usr/bin/perl
use 5.010;
chomp(@strings = <STDIN>);
foreach (@strings){
push @revstrings, $_;
}
while($i++ <= scalar @revstrings){
say pop @revstrings;
}
它是这样的:
如果我将while循环中的
<=
更改为<
,则输出是相同的。 最佳答案
你永远不会半途而废......每次通过最后一次迭代,你都会得到:
$i++
表示$i
会加1; pop @revstrings
将意味着 scalar @revstrings
将减一。 当
$i++
刚好超过原始 @revstrings
长度的一半时,它们会在中间相遇。实际上,
$i++
是不必要的,因为当数组为空时 scalar @revstrings
将为零,因此您只需要:while(scalar @revstrings){
say pop @revstrings;
}
关于perl - 为什么这个简单的 Perl push/pop 程序不工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1081476/