2017-07-20 67 views
1

最近我碰到这样的事情在一定的perl脚本来了:区别_在Perl

while(<FH>){ 
    $var1 = <FH>; $var2 = $_ 
} 

由于与文件句柄名的钻石运营商内部的工作方式为readline(FH)相同;我可否知道这样的书写有什么特别的含义?

非常感谢

+0

处理来自文件的一些更复杂的**序列**行可能是有意义的。没有更完整的例子,这是一个猜测。 – AnFi

回答

4

让我们联系直接问题的文档。

readline

这是实现<EXPR>运营商内部的功能,但你可以直接使用它。该<EXPR>运营商进行了更详细的I/O Operators in perlop

讨论并在I/O Operators我们发现声明

<FILEHANDLE>也可以拼写readline(*FILEHANDLE)。请参阅readline

因此<FH>readline(FH)是等价的(我们可以通过*FHFHreadline())。

请注意,词法文件句柄比typeglobs更受欢迎。例如参见Typeglobs and Filehandles in perldata。所以,打开你的文件,如

open my $fh, '<', $file or die "Can't open $file: $!"; 

,然后你做<$fh>“从文件句柄”(从与它相关的文件)读取。

虽然,运营商<>本身还有其他一些属性。请参阅广泛的perlop讨论。


该问题的其余代码段引发了其他问题。

while条件中的<FH>条件处于标量上下文中,因此它从连接到FH的资源中读取一行。随着我们进入循环体,<FH>再次读出一行,因此下一个,它被分配到$var1

<$FH>while条件内的唯一内容时,该行被赋予默认的variable $_。请参阅上面链接的I/O Operators。因此$var2被分配了这一行。

因此,在执行循环体之后,我们在$var2的第一行和$var1的下一行。这个奇怪的循环在每次迭代中都会遍历两行。

相关问题