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