Perl钻石运算符是否迭代非魔术数组(不是@ARGV)?

Ful*_*pin 5 arrays perl diamond-operator

我不认为以下内容应该有效,但确实如此:

$ perl -e '@a = qw/1222 2 3/; while (<@a>) { print $_ ."\n";}'
1222
2
3
$
Run Code Online (Sandbox Code Playgroud)

据我所知,Perl的<>操作员应该使用文件句柄,全局等工作,除了文字<>(而不是<FILEHANDLE>),它会神奇地迭代@ARGV.

有谁知道它是否应该像我在测试中那样工作?

dlo*_*owe 11

魔术在工作!

来自' perldoc perlop ':

如果尖括号内的内容既不是文件句柄也不是包含文件句柄名称,typeglob或typeglob引用的简单标量变量,则它被解释为要进行全局化的文件名模式,以及文件名列表或列表中的下一个文件名返回,具体取决于上下文.

这是您使用此代码触发的规则.这是发生了什么:

  1. <@a>(在语法上,在编译时)被确定为glob扩展
  2. 因此<>将@a转换为字符串"1222 2 3"(数组的字符串插值)
  3. 列表上下文中的glob("1222 2 3")返回('1222','2','3')