从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