perl - Perl 中 $var = <FH> 和 $_ 之间的区别

标签 perl

最近我在某个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() )。

请注意,词法文件句柄优于类型团。请参阅Typeglobs and Filehandles in perldata例如。所以打开你的文件就像

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

然后你就做<$fh>读取“从文件句柄”(从与其关联的文件)。

运算符(operator)<>不过,它本身还有一些其他属性。查看广泛的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/

相关文章:

perl - 将 authHeader 添加到 Perl SOAP::Lite 请求

Perl 密码学 : Encrypting/Decrypting ASCII chracters with pack and unpack functions

佩尔。检查标量的值是否为零数

perl - 将字符串和临时数组传递到 1 行中的 sub 中?

json - 如何递归搜索与给定模式匹配的所有节点的 JSON 文件并将 JSON 'path' 返回到节点及其值?

perl - 类 Lisp 语法用 perl 编译成 javascript

perl - 为什么我不从我的子进程中获取退出状态?

Perl 打开名称为变量的文件

regex - 如何在一个字符串中匹配一个值、一个或两个值?

perl - 如何从 PDL 矩阵中提取特定行?