除非我試圖創建一個沒有人應該知道的私有包,否則我會爲每個文件放置一個包。解決了這個問題。但是,讓我們把它們放在同一個文件中。
該use加載文件並調用該包中的import
方法。它的參數看起來像一個模塊名稱,這真的只是顯而易見的。它正在尋找文件。如果該文件不在那裏,那就是barf。
你可以做到這一點,在那裏BarObj
假定FooObj
已經存在:
{
package FooObj;
sub new { bless { _count => 0 }, $_[0] }
sub add_data { $_[0]->{_count}++ }
}
{
package BarObj;
use Data::Dumper;
sub new {
bless { myFoo => FooObj->new }, $_[0];
}
sub foo { $_[0]->{myFoo} }
sub some_method { print Dumper($_[0]) }
}
my $bar = BarObj->new;
$bar->some_method;
如果你需要一個包交互(而這一切,它是:不是一個模塊或對象),你只要在你想使用它之前需要定義它。如果您需要進口的東西,你可以撥打import
直接:
FooObj->import(...);
假設有一個從FooObj
要導入(而不是繼承!),你叫import
直接沒有加載的東西;
{
package FooObj;
use Data::Dumper;
sub new { bless { _count => 0 }, $_[0] }
sub add_data { $_[0]->{_count}++ }
use Exporter qw(import);
our @EXPORT = qw(dumper);
sub dumper { print Dumper($_[0]) }
}
{
package BarObj;
FooObj->import;
sub new {
bless { myFoo => FooObj->new }, $_[0];
}
sub foo { $_[0]->{myFoo} }
# dumper mixin, not inherited.
sub some_method { dumper($_[0]) }
}
my $bar = BarObj->new;
$bar->some_method;
提示是在這裏的錯誤:「無法找到FooObj.pm」。 .pm總是意味着一個文件。 – 2010-04-12 16:50:42