最近我碰到这样的事情在一定的perl脚本来了:区别_在Perl
while(<FH>){
$var1 = <FH>; $var2 = $_
}
由于与文件句柄名的钻石运营商内部的工作方式为readline(FH)
相同;我可否知道这样的书写有什么特别的含义?
非常感谢
最近我碰到这样的事情在一定的perl脚本来了:区别_在Perl
while(<FH>){
$var1 = <FH>; $var2 = $_
}
由于与文件句柄名的钻石运营商内部的工作方式为readline(FH)
相同;我可否知道这样的书写有什么特别的含义?
非常感谢
让我们联系直接问题的文档。
这是实现
<EXPR>
运营商内部的功能,但你可以直接使用它。该<EXPR>
运营商进行了更详细的I/O Operators in perlop
讨论并在I/O Operators我们发现声明
<FILEHANDLE>
也可以拼写readline(*FILEHANDLE)
。请参阅readline。
因此<FH>
和readline(FH)
是等价的(我们可以通过*FH
或FH
到readline()
)。
请注意,词法文件句柄比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
的下一行。这个奇怪的循环在每次迭代中都会遍历两行。
处理来自文件的一些更复杂的**序列**行可能是有意义的。没有更完整的例子,这是一个猜测。 – AnFi