while(<@ array>)对perl的影响

Psy*_*lex 8 perl while-loop

while(<@thisArray>)
Run Code Online (Sandbox Code Playgroud)

有谁知道这会做什么?我们只是在讨论它,因为代码通常是这样的:

while(<STDIN>)
Run Code Online (Sandbox Code Playgroud)

Iva*_*uev 10

它将遍历与模式匹配的文件名@thisArray.

perl -MO=Deparse -e '1 while(<@thisArray>)'演出结果<>转换为glob:

use File::Glob ();
'???' while defined($_ = glob(join($", @thisArray)));
Run Code Online (Sandbox Code Playgroud)

来自glob手册:

在标量上下文中,glob遍历此类文件名扩展,在列表耗尽时返回undef.

$"空间的默认值,因此多个模式@thisArray将连接成单个字符串,然后按空格内部拆分glob:

请注意,glob将其参数拆分为空格,并将每个段视为单独的模式.


pav*_*vel 6

<@thisArray>作为glob(@thisArray).因此,它提供了与数组成员匹配的所有文件的列表.

如果数组的元素与文件不匹配,则返回元素本身.


cho*_*oba 5

perlop:

如果尖括号内的内容既不是文件句柄也不是包含文件句柄名称,typeglob或typeglob引用的简单标量变量,则将其解释为要进行全局处理的文件名模式