您对use
行中的括号()
感到困惑。
use MyPkg::Abc(); # this is not calling MyPkg::Abc
use MyPkg::Bcd(); # neither is this
xxx(); # this calls sub xxx in your package
当你在你的程序中use Foo::Bar
行,Perl会去找一个叫Bar.pm
文件的文件夹Foo
(所以这是在Windows Foo/Bar.pm
或Foo\Bar.pm
)中并加载它。通常该文件将包含package Foo::Bar
。现在Perl知道这个包(也称为命名空间)。接下来,它将调用包Foo::Bar
中的import
子例程。这将使得该包中的一些潜在用户可以在中调用包(即您的程序)。该过程被称为,导入。
如果你只想要导入具体的事情,你可以通过把该列表中use
这样以后手串import
一个列表:
use List::Util ('min', 'max');
use List::Util qw(min max); # same as above, just shorter
现在你在你的程序得到min
和max
。
也有模块导出(从他们的角度来看,从你的导入)默认情况下。如果你不想让这些名字空间出现,你可以给use
一个空的列表。
use JOSN; # exports 'decode_json' and 'encode_json' by default
use JSON(); # doesn't export anything
my $json = JSON->new;
但是,如果你想要的是从MyPkg::Bcd
加载子程序xxx
和包装出口,那么你应该不有那些()
那里。或者你必须调用子程序MyPkg::Bcd::xxx()
。