2014-02-16 69 views
0

我有一個模塊,當我試圖讓在初始化設置默認屬性,是給下面的錯誤子程序調用時get_name無法在Perl的對象屬性返回默認值

 Use of uninitialized value 

示例代碼

 package test; 
    #.... 
    #.... 
    sub new { 
     my ($class) = @_; 
     my $self = {}; 
     bless $self,$class; 
     $self->_initialize(); 
     return $self; 
    } 

    sub _initailalize { 
     my($self) = @_; 
     $self = { 
        _name => 'NA' 
     }; 
    } 

    sub get_name { 
       return $_[0]->{_name}; 
    } 

需要寶貴的輸入。

+3

「我的」變量$ self在相同範圍內聲明前面的聲明https://eval.in/102140 –

回答

5

您正在_initialize的本地範圍內重新定義$ self並分配一個新的hashref。這樣你就不會將_name鍵添加到祝福的物體上。 _initialize完成後,您新分配的$self(帶有簡單的hashref)就消失了。因此在get_name它不能訪問密鑰_name

sub _initailalize { # btw typo here 
    my ($self) = @_; 
    $self->{_name} = 'NA'; 
} 

如果你這樣做,你需要在每一行上分配每個成員。


作爲一個建議,這種OO的內置風格非常繁瑣。試試看Moose或它的衍生品,因爲它們非常強大。