gpt4 book ai didi

perl - Perl中$ var = 和$ _之间的差异

转载 作者:行者123 更新时间:2023-12-02 09:17:53 25 4
gpt4 key购买 nike

最近,我在某个perl脚本中遇到了这样的事情:

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

由于内部具有文件句柄名称的菱形运算符的工作方式与 readline(FH)相同;我可以知道这样的写作有什么特殊含义吗?

非常感谢

最佳答案

让我们获取有关直接问题的文档。

readline

This is the internal function implementing the <EXPR> operator, but you can use it directly. The <EXPR> operator is discussed in more detail in I/O Operators in perlop



然后在 I/O Operators中找到以下语句

<FILEHANDLE> may also be spelled readline(*FILEHANDLE). See readline.



因此 <FH>readline(FH)是等效的(我们可以将 *FHFH传递给 readline())。

请注意,词法文件句柄比typeglob更可取。例如,参见 Typeglobs and Filehandles in perldata。所以像这样打开文件
open my $fh, '<', $file or die "Can't open $file: $!";

然后您执行 <$fh>以从文件句柄(与之关联的文件)中读取。

但是,运算符 <>本身还有其他一些属性。请参阅广泛的 perlop讨论。

该问题中的其余代码片段提出了其他问题。
<FH>条件内的 while在标量上下文中,因此它从连接到 FH的资源中读取一行。当我们进入循环体时, <FH>将再次读取一行,从而读取下一行,将其分配给 $var1

<$FH>是有条件的 while内部的唯一内容时,该行将分配给默认的 variable $_ 。参见上面链接的 I/O Operators。因此, $var2被分配了这一行。

因此,在执行循环主体之后,我们在 $var2中具有第一行,在 $var1中具有下一行。这个奇怪的循环在每次迭代中遍历两行,首先分配两者的第二行,然后分配第一行。

关于perl - Perl中$ var = <FH>和$ _之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45204822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com