我有一个模块,当我试图在初始化中设置默认属性时,在调用子例程时给出以下错误 get_name
Use of uninitialized value
Run Code Online (Sandbox Code Playgroud)
示例代码
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};
}
Run Code Online (Sandbox Code Playgroud)
需要宝贵的投入.
您正在本地范围内重新定义$ self _initialize并分配新的hashref.这样你就不会把_name钥匙添加到受祝福的物体上.完成后_initialize,您新分配的$self(使用简单的hashref)就消失了.因此在get_name它无法访问密钥_name.
sub _initailalize { # btw typo here
my ($self) = @_;
$self->{_name} = 'NA';
}
Run Code Online (Sandbox Code Playgroud)
如果你这样做,你需要在一行上分配每个成员.
作为一个建议,这种内置的OO风格非常繁琐.试着看看Moose或它的衍生物,因为它们非常强大.