使用带有空括号的Perl模块

时间:2012-11-15 15:30:36

标签: perl

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

(假设use strict; use warnings;

我理解use File::Find;加载模块的所有子程序。

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

那么File::Find ();做了什么?具体来说,为什么空的parens?

2 个答案:

答案 0 :(得分:9)

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.

答案 1 :(得分:1)

  

那么File :: Find();做?具体来说,为什么空的parens?

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