perl - Perl 菱形运算符是否迭代非魔法数组(不是@ARGV)?

标签 perl arrays diamond-operator

我不认为以下应该工作,但它确实:

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

据我所知,Perl 的 <>操作符应该处理文件句柄、globs 等,除了文字 <> (而不是 <FILEHANDLE> ),它神奇地迭代了 @ARGV .

有谁知道它是否也应该像我的测试一样工作?

最佳答案

魔法在工作!

来自' perldoc perlop ':

If what's within the angle brackets is neither a filehandle nor a simple scalar variable containing a filehandle name, typeglob, or typeglob reference, it is interpreted as a filename pattern to be globbed, and either a list of filenames or the next filename in the list is returned, depending on context.



这是您使用此代码触发的规则。这是发生了什么:
  • <@a> 被(语法上,在编译时)确定为 glob扩展
  • 因此 <> 将@a 变成字符串“1222 2 3”(数组的字符串插值)
  • glob ("1222 2 3") 在列表上下文中返回 ('1222', '2', '3')
  • 关于perl - Perl 菱形运算符是否迭代非魔法数组(不是@ARGV)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1640724/

    相关文章:

    perl - 如何使用 XML::Twig 跳过不需要的元素?

    xml - 如何在 Perl 中修改复杂的 XML 文档以向文本节点添加额外的标记?

    C++:使用for循环允许用户将数字输入数组

    javascript - 使用node.js读取对象属性

    java - 这个菱形符号的解释?

    java - utf-8 不可见字符

    javascript - 对对象数组和这些对象中的嵌套数组进行排序

    java - 在 Java 6 的右侧使用泛型?

    java - 如何在 Gmaven 中转义 Java 泛型?

    perl - 引用 Perl/Moose 包名称的简写?