您對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()
。