簡體   English   中英

為什么這個簡單的Perl推/彈程序不起作用?

[英]Why isn't this simple Perl push/pop program working?

我正在閱讀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;
}

它是這樣的:

$ ./first



[^ d]


$

輸出是相同的,如果我改變<=在while循環剛<

你永遠不會過中...每次通過最后一次迭代,你會得到:

  • $i++意味着$i將增加1;
  • pop @revstrings意味着scalar @revstrings將減少一。

$i++剛超過原始@revstrings長度的一半時,它們會在中間@revstrings

實際上, $i++是不必要的,因為當數組為空時scalar @revstrings將為零,所以你只需要:

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

編輯 :簡短回答是“因為你的循環條件錯誤。” 更詳細的“每次迭代評估標量@revstrings”。

while (<STDIN>) {
    push @lines, $_
}

while(@lines){
    print pop @lines;
}

減少打字

@lines = <STDIN>;

while(@lines){
    print pop @lines;
}

打字較少

@lines = <STDIN>;
print reverse @lines;

打字較少

print reverse <>;

但最好的解決方案是

exec("tac");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM