有些地方我不明白:
说 in
是一个包含以下内容的文件:
1
2
3
和foo.pl
:
use strict;
<>;
print;
<>;
print;
<>;
print;
然后运行:
perl foo.pl < in
为什么这个程序不输出任何东西?
...虽然这个:
use strinct;
while(<>) {
print;
}
输出整个文件
最佳答案
因为
while(<>)
是
的简写while($_ = <>)
这意味着该行被分配给默认变量$_
。 print
也使用它。
你写了什么:
<>;
不给$_
赋值。它只是 void 上下文中的一个 readline,这意味着该值被丢弃并且不会存储在任何地方。因此 $_
是空的。如果您使用警告
,Perl 会告诉您发生了什么。
Use of uninitialized value $_ in print
如果您手动进行分配,它将起作用:
$_ = <>;
另请注意,您不必重定向文件内容,只需提供文件名作为参数即可:
perl foo.pl in
关于Perl,如何在循环外从标准输入读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29245445/