6

我正在尝试学习 Perl 并了解有关use模块的内容。

(假设use strict; use warnings;

我知道use File::Find;加载模块的所有子例程。

我知道use File::Find qw(find);只加载find模块的子例程(尽管其他子例程我可以通过 使用File::Find::finddepth)。

那么做File::Find ();什么呢?具体来说,为什么是空括号?

4

2 回答 2

11

tl;dr :它说不导出任何东西而不是默认值。

长版:

File::Find 具有our @EXPORT = qw(find finddepth);,因此默认情况下会导出这些子项。如果我们只是使用该模块然后尝试将其称为find错误,因为我没有将正确的参数传递给它findfind 确实存在。

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.
于 2012-11-15T15:32:52.340 回答
1

那么 File::Find (); 是什么?做?具体来说,为什么是空括号?

简而言之,您需要-ing 这个模块并调用File::Find::import导入函数(如您的示例中的findfinddepth)。所以空括号意味着你不想导入任何东西,并且隐式禁止导入任何默认符号。

于 2012-11-15T15:36:35.570 回答