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