在这个片段中:
find( sub {
print "found " . $File::Find::name . "\n";
}, ("."));
Run Code Online (Sandbox Code Playgroud)
会(".")
是什么类型的?数组还是标量?
我们来看看参数File::Find::find
.文件说:
find(\&wanted, @directories_to_search);
Run Code Online (Sandbox Code Playgroud)
让我们想find()
一下这样写的函数:
sub find
{
my ($wanted, @directories_to_search) = @_;
...
}
Run Code Online (Sandbox Code Playgroud)
你需要意识到的是传递给函数的参数已经在列表上下文(标量列表)中:这是特殊变量@_
.因此,当您调用时find()
,第一个参数被赋值为$wanted
,被视为coderef(引用只是一种标量).分配给的下一个变量是一个数组.将列表分配给数组时,该数组是"贪婪的"并从列表中获取所有值.
因此,当您指定@_
时($wanted, @directories_to_search)
,所有剩余的参数都分配给@directories_to_search
(一组标量).
现在让我们回到你的代码.在最高级别,您find()
通过传递包含两个术语的列表来调用:
sub { ... }
"."
:一个长度为一个字符的字符串.就像这样:
my ($wanted, @directories_to_search) = (sub { ... }, ".");
Run Code Online (Sandbox Code Playgroud)
所以find()
接收上面描述的那些参数:匿名coderef是第一个参数,并且吞噬@directories_to_search
其余参数:
my $wanted = sub { ... };
my @directories_to_search = ".";
Run Code Online (Sandbox Code Playgroud)
我不太确定你为什么问这个问题(这个(".")
术语是什么类型),但你可以find()
像上面写的一样打电话,或者你可以删除额外的括号(它们不添加任何东西) ).
归档时间: |
|
查看次数: |
233 次 |
最近记录: |