我认为以下内容不应该起作用,但确实如此:
$ perl -e '@a = qw/1222 2 3/; while (<@a>) { print $_ ."\n";}'
1222
2
3
$
据我所知,Perl 的<>
运算符应该在文件句柄、glob 等上工作,除了文字<>
(而不是<FILEHANDLE>
),它神奇地迭代了@ARGV
.
有谁知道它是否应该像我的测试一样工作?
我认为以下内容不应该起作用,但确实如此:
$ perl -e '@a = qw/1222 2 3/; while (<@a>) { print $_ ."\n";}'
1222
2
3
$
据我所知,Perl 的<>
运算符应该在文件句柄、glob 等上工作,除了文字<>
(而不是<FILEHANDLE>
),它神奇地迭代了@ARGV
.
有谁知道它是否应该像我的测试一样工作?
魔术在工作!
从“ perldoc perlop ”:
如果尖括号中的内容既不是文件句柄,也不是包含文件句柄名称、typeglob 或 typeglob 引用的简单标量变量,则将其解释为要通配的文件名模式,以及文件名列表或列表中的下一个文件名根据上下文返回。
这是您使用此代码触发的规则。这是正在发生的事情:
这是调用glob。
<FH>
不是文件句柄的名称,而是对句柄进行行输入操作的角度运算符。当人们尝试打印到角度运算符时,这种混淆通常会表现出来” - Programming Perl
因此,在您的情况下,数组是一个句柄,这是有道理的,因此运算符会对其进行迭代。所以在回答你的问题时,是的,我认为这是标准的(但晦涩的)Perl。它是晦涩难懂的,因为该语言有更明显的方法来迭代数组。
PS 但是,感谢这一点,这对于代码高尔夫比赛来说非常有用。