我在学习Perl并了解一些关于use
和模块的内容。使用带有空圆括号的Perl模块
(假设use strict; use warnings;
)
我明白use File::Find;
加载模块的所有子程序。
据我所知,use File::Find qw(find);
只加载模块的find
子程序(尽管其他子程序可以通过File::Find::finddepth
使用)。
那么File::Find();
做什么?具体来说,为什么是空洞的父亲?
我在学习Perl并了解一些关于use
和模块的内容。使用带有空圆括号的Perl模块
(假设use strict; use warnings;
)
我明白use File::Find;
加载模块的所有子程序。
据我所知,use File::Find qw(find);
只加载模块的find
子程序(尽管其他子程序可以通过File::Find::finddepth
使用)。
那么File::Find();
做什么?具体来说,为什么是空洞的父亲?
tl; dr:它说不导出任何东西而不是默认值。
长版:
文件::查找具有our @EXPORT = qw(find finddepth);
,所以这些潜艇在默认情况下出口。如果我们只是使用该模块,然后尝试拨打find
它错误,因为我没有通过它的正确参数find
但find
确实存在。
[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.
那么,是什么文件::查找();做?具体来说,为什么是空洞的父亲?
总之,你需要-ing这个模块并调用File::Find::import
导入功能(如find
和finddepth
在你的例子)。所以空括号意味着你不想导入任何东西,并且隐式禁止导入任何默认符号。
也许你可以尝试阅读“使用”文档 - http://perldoc.perl.org/functions/use.html –