有些事情我不明白:
说in
是一个包含以下内容的文件:
1
2
3
和foo.pl
:
use strict;
<>;
print;
<>;
print;
<>;
print;
然后运行:
perl foo.pl < in
为什么这个程序没有输出任何东西?
......虽然这个:
use strinct;
while(<>) {
print;
}
输出整个文件
答案 0 :(得分:6)
因为
while(<>)
是
的简写while($_ = <>)
这意味着该行被分配给默认变量$_
。这也由print
使用。
你写的是什么:
<>;
不为$_
分配任何内容。它只是void上下文中的readline,这意味着该值被丢弃并且不存储在任何地方。因此$_
为空。如果你use warnings
,Perl会告诉你发生了什么。
Use of uninitialized value $_ in print
如果您手动执行分配,它将起作用:
$_ = <>;
另请注意,您不必重定向文件内容,只需提供文件名作为参数:
perl foo.pl in