我正在尝试学习 Perl 并了解有关use
模块的内容。
(假设use strict; use warnings;
)
我知道use File::Find;
加载模块的所有子例程。
我知道use File::Find qw(find);
只加载find
模块的子例程(尽管其他子例程我可以通过 使用File::Find::finddepth
)。
那么做File::Find ();
什么呢?具体来说,为什么是空括号?
我正在尝试学习 Perl 并了解有关use
模块的内容。
(假设use strict; use warnings;
)
我知道use File::Find;
加载模块的所有子例程。
我知道use File::Find qw(find);
只加载find
模块的子例程(尽管其他子例程我可以通过 使用File::Find::finddepth
)。
那么做File::Find ();
什么呢?具体来说,为什么是空括号?
tl;dr :它说不导出任何东西而不是默认值。
长版:
File::Find 具有our @EXPORT = qw(find finddepth);
,因此默认情况下会导出这些子项。如果我们只是使用该模块然后尝试将其称为find
错误,因为我没有将正确的参数传递给它find
但find
确实存在。
quentin@workstation:~ # perl
use File::Find;
find();
no &wanted subroutine given at /Users/david/perl5/perlbrew/perls/perl-5.16.1/lib/5.16.1/File/Find.pm line 1064.
在语句中传递一个列表use
会覆盖默认值并仅导出您要求的子项。空列表意味着不会导出任何列表,并且会因为find
不存在而出错。这样的:
quentin@workstation:~ # perl
use File::Find ();
find();
Undefined subroutine &main::find called at - line 2.
那么 File::Find (); 是什么?做?具体来说,为什么是空括号?
简而言之,您需要-ing 这个模块并调用File::Find::import
导入函数(如您的示例中的find
和finddepth
)。所以空括号意味着你不想导入任何东西,并且隐式禁止导入任何默认符号。