为什么这个简单的Perl推/弹程序不起作用?

前端之家收集整理的这篇文章主要介绍了为什么这个简单的Perl推/弹程序不起作用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在阅读Llama( Learning Perl)的书,并正在进行练习.对于这个练习:

Write a program that reads a list of strings on separate lines until end-of-input and prints out the list in reverse order. [. . .]

好吧,我已经想出了一个更简单的方法(我记得你可以在数组上使用反向… Perl是如此……真棒到目前为止),但我想知道为什么这个不起作用.

#!/usr/bin/perl

use 5.010;

chomp(@strings = <STDIN>);

foreach (@strings){
    push @revstrings,$_;
}

while($i++ <= scalar @revstrings){
    say pop @revstrings;
}

它是这样的:

$./first
one
two
three

[^D]
three
two
$

如果我将while循环中的< =更改为<而输出是相同的.

解决方法

你永远不会过半…每次通过最后一次迭代,你会得到:

> $i意味着$i将增加1;
> pop @revstrings意味着标量@revstrings将减少一个.

当$i超过原始@revstrings长度的一半时,他们会在中间相遇.

实际上,$i是不必要的,因为当数组为空时标量@revstrings将为零,所以你只需要:

while(scalar @revstrings){
    say pop @revstrings;
}

猜你在找的Perl相关文章