2012-11-15 25 views
4

我在学习Perl并了解一些关于use和模块的内容。使用带有空圆括号的Perl模块

(假设use strict; use warnings;

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

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

那么File::Find();做什么?具体来说,为什么是空洞的父亲?

+0

也许你可以尝试阅读“使用”文档 - http://perldoc.perl.org/functions/use.html –

回答

9

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

长版:

文件::查找具有our @EXPORT = qw(find finddepth);,所以这些潜艇在默认情况下出口。如果我们只是使用该模块,然后尝试拨打find它错误,因为我没有通过它的正确参数findfind确实存在。

[email protected]:~ # 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不存在。这样的:

[email protected]:~ # perl 
use File::Find(); 
find(); 

Undefined subroutine &main::find called at - line 2. 
1

那么,是什么文件::查找();做?具体来说,为什么是空洞的父亲?

总之,你需要-ing这个模块并调用File::Find::import导入功能(如findfinddepth在你的例子)。所以空括号意味着你不想导入任何东西,并且隐式禁止导入任何默认符号。

相关问题