2011-04-18 49 views
3

我是perl的新手,認真地發現很難使用它的面向對象的功能,因爲我來自C++,python Background。 我想創建一個對象列表,但我不知道如何在perl中實現這一點。我從一個數組開始,但似乎沒有工作。perl中的對象數組?

package X; 

sub new { 
    ..... 
} 


package Y; 

sub new { 
    ..... 

} 

package Z; 

my @object_arr = (X::new, Y::new); 

foreach $object (@object_arr) { 
    $object->xyz(); 
} 

這會拋出一個錯誤「無法調用方法」xyz「沒有包或對象引用」。任何幫助表示讚賞。

回答

11

你的代碼的搞掂版本,註釋,就是:

package X; 

# You need to return a blessed object 
sub new { 
     my $self = bless {}, "X"; 
     return $self; 
} 

# You need to define xyz before calling it 
sub xyz { 
     print "X"; 
} 

package Y; 

sub new { 
     my $self = bless {}, "Y"; 
     return $self; 

} 


sub xyz { 
     print "Y"; 
} 

package Z; 

# You need to call the new method 
my @object_arr = (X->new(), Y->new()); 

# Don't forget to my when defining variables (including $object) 
foreach my $object (@object_arr) { 
    $object->xyz(); 
} 

您可能還需要調查Moose

+0

+1駝鹿。來自類似OO的背景,我只能說我不明白你爲什麼不'使用Moose'。 – wprl 2011-04-18 15:43:17

+7

只要您從類X或Y開始派生,就會中斷。您應該說'my $ class = shift;我的$ self = bless {},$ class;'在構造函數中。 – Sean 2011-04-18 16:10:38