Perl,如何从循环外的stdin读取?

时间:2015-03-25 00:28:25

标签: perl input readfile

有些事情我不明白:

in是一个包含以下内容的文件:

1
2
3

foo.pl

use strict;
<>;
print;
<>;
print;
<>;
print;

然后运行:

perl foo.pl < in

为什么这个程序没有输出任何东西?

......虽然这个:

use strinct;
while(<>) {
    print;
}

输出整个文件

1 个答案:

答案 0 :(得分:6)

因为

while(<>) 

的简写
while($_ = <>) 

这意味着该行被分配给默认变量$_。这也由print使用。

你写的是什么:

<>;

不为$_分配任何内容。它只是void上下文中的readline,这意味着该值被丢弃并且不存储在任何地方。因此$_为空。如果你use warnings,Perl会告诉你发生了什么。

Use of uninitialized value $_ in print

如果您手动执行分配,它将起作用:

$_ = <>;

另请注意,您不必重定向文件内容,只需提供文件名作为参数:

perl foo.pl in