我正在阅读 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/

    10-12 00:53