從Perl::Critic::Policy::InputOutput::ProhibitExplicitStdin
爲什麼要在Perl中使用<ARGV>或<>代替<STDIN>?
引用Perl有一個有益魔法文件句柄名爲* ARGV是檢查命令行,如果有任何參數,打開並讀取那些爲文件。如果沒有參數,* ARGV的行爲與* STDIN相反。如果你想創建一個從STDIN讀取的程序,這種行爲幾乎總是你想要的。這通常是寫在以下兩種等價形式之一:
while (<ARGV>) { # ... do something with each input line ... } # or, equivalently: while (<>) { # ... do something with each input line ... }
- 是它「只是一個約定」,還是有一些充分的理由不使用
<STDIN>
?
我覺得<STDIN>
讓我的代碼的意圖不是使用<>
或<ARGV>
更加清晰。
我的代碼的流程是這樣的
my @inp = <STDIN>;
my $len = $inp[0];
...
for(my $i = 0; $i < ($len + 0); $i++) {
my @temp = split (' ', $inp[$i]);
...
}
感謝。如果這是唯一的原因,那麼我覺得''更好。 –
Lazer
2010-09-19 12:22:57
@Lazer:這不是「更好」,它對你使用該程序的方式施加限制。爲什麼不必要地這樣做? – Ether 2010-09-19 17:43:46
Perl :: Critic是基於「Perl最佳實踐」一書的,它簡單地陳述:「避免使用* STDIN,除非你確實是這個意思。」給出的理由是上述答案的更長版本。如果你確實意味着只有STDIN會執行,則不會接受命令行參數 - 然後使用顯式STDIN。 – jmanning2k 2010-09-20 20:06:39