Perl,如何在循环外读取stdin?
有件事我不明白: 假设中的Perl,如何在循环外读取stdin?,perl,input,readfile,Perl,Input,Readfile,有件事我不明白: 假设中的是一个包含以下内容的文件: 1 2 3 和foo.pl: use strict; <>; print; <>; print; <>; print; 使用严格; ; 印刷品; ; 印刷品; ; 印刷品; 然后运行: perl foo.pl < in perl foo.pl
是一个包含以下内容的文件:
1
2
3
和foo.pl
:
use strict;
<>;
print;
<>;
print;
<>;
print;
使用严格;
;
印刷品;
;
印刷品;
;
印刷品;
然后运行:
perl foo.pl < in
perl foo.pl
为什么此程序不输出任何内容?
…而这个:
use strinct;
while(<>) {
print;
}
使用strinct;
while(){
印刷品;
}
输出整个文件,因为
while(<>)
不向$分配任何内容。它只是void上下文中的一个readline,这意味着该值被丢弃,而不是存储在任何地方。因此,$是空的。如果使用警告,Perl将告诉您发生了什么
Use of uninitialized value $_ in print
如果您手动执行分配,它将工作:
$_ = <>;
我知道,我的问题是为什么第一个不输出任何东西?好吧,thx:)出于好奇,有没有一种方法可以做到$\ux=;印刷品代码>没有手动完成任务?@hl037_uuuuwell<代码>打印
将打印所有行。您还可以执行后缀循环:print for
。如果只想打印一行,print scalar
(或将文件句柄置于scalar上下文中的任何其他方法,例如,print”。
)。TIMTOWTDI是Perl方式。while()
是while(defined($\u=)
@mob是的,在最初的答案中,我包含了这一部分,但我删除了它,因为我觉得它会分散我的注意力。
Use of uninitialized value $_ in print
$_ = <>;
perl foo.pl in