while循环与perl中单独使用菱形运算符之间的区别

Qia*_* Li 5 perl

我对以下内容感到困惑:

<>; print;
Run Code Online (Sandbox Code Playgroud)

while(<>){print;}
Run Code Online (Sandbox Code Playgroud)

第一个不打印任何东西,但第二个打印.是不是<>总是将输入读入存储$_

谢谢.

Eri*_*rom 13

钻石文件输入迭代器只有在while循环的条件下才是神奇的:

$ perl -MO=Deparse -e '<>; print;'
<ARGV>;
print $_;
-e syntax OK

$ perl -MO=Deparse -e 'while (<>) {print;}'
while (defined($_ = <ARGV>)) {
    print $_;
}
-e syntax OK
Run Code Online (Sandbox Code Playgroud)

这一切都记录在perlop中


mob*_*mob 8

它不作为while陈述的条件.

$ perl -MO=Deparse -e 'while(<>) { print }'
while (defined($_ = <ARGV>)) {
    print $_;
}
-e syntax OK

$ perl -MO=Deparse -e '<>; print'
<ARGV>;
print $_;
-e syntax OK
Run Code Online (Sandbox Code Playgroud)

perlop自动分配$_仅在此上下文中发生的文档:

通常,您必须将返回的值分配给变量,但有一种情况会发生自动分配.当且仅当输入符号是"while"语句条件内的唯一内容时(即使伪装成"for(;;)"循环),该值自动分配给全局变量$ _,破坏任何曾经有过.(这对你来说可能看起来很奇怪,但你几乎在你编写的每个Perl脚本中都会使用该构造.)$ _变量不是隐式本地化的.你必须放一个"本地$ _;" 在循环之前,如果你想要发生这种情况.