在Perl中,“while(<FH>)”和“if(<FH>)”有什么区别?

3
这是有效的代码:

这个有效:

while (<CONF>) {
  print $_;
}

但是这个不行:-
if (<CONF>) {
  print $_;
}

出现未初始化值的错误,请问我漏掉了什么?


好的:“你最喜欢的是哪个值?”这是你的任务开始的地方,请不要被扔下桥。 - user166390
我问这个问题的原因是实际上更像是:“在(<FH>)后面的魔法为什么会给$_赋予有意义的值?” 我会从perlsyn(关于while)开始查找,如果没有找到,就去看perlvar(关于$_)。 - user166390
你所寻找的文档在perlop中。 - mob
2
有点相关 - https://dev59.com/5m445IYBdhLWcg3wBVrz。Eric Strom演示了一种技巧,可以让 if (<HANDLE>)(以及 unless <HANDLE>until <HANDLE>)自动分配给 $_,如果这是你想要的话。 - mob
2个回答

5
while (<CONF>)

被重写为

while (defined($_ = <CONF>))

所以,您可能需要:

if (defined($_ = <CONF>))

4
当文件句柄是while循环中唯一的条件时,才会将I/O读取到$_中。这是一个特例。它不会在if语句中将内容读取到$_中。详见这里

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接