Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl,如何在循环外读取stdin?_Perl_Input_Readfile - Fatal编程技术网

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