我对一个对象有一个奇怪的问题(扩展了superobjects fyi)
变量$ self已经被超类祝福,并且可以正常转储。 我有几十个具有相同的setter / getter逻辑的包,并且都有'使用严格'。 这个给我一个错误,他们中的一个返回,并想摆脱它。 错误是:
Can't use string ("") as a HASH ref while "strict refs"
返回$self->{"_table"}
行。
为什么这个与其他代码相同的行为会有所不同?
如果我之前检查过类对象,则消息消失。
/* Constructor*/
sub new {
...
Width($self, delete($def->{"width"})) ; # $self is created before already
Table($self,$table) ;
...
}
sub Width
{
my ($self,$ width) = @_ ;
$self->{"_width"} = $width if $width ;
return $self->{"_width"} ;
}
/* WORKING CODE VERSION*/
sub Table
{
my ($self, $table)=@_ ;
return unless $self ;
$self->{"_table"} = $table if $table ;
return $self->{"_table"} ;
}
/* WARNING CODE VERSION*/
sub Table
{
my ($self, $table)=@_ ;
$self->{"_table"} = $table if $table ;
return $self->{"_table"} ; <<<<<< STRICT ERROR
}
答案 0 :(得分:2)
您在某个地方Table("", ...)
或Table(undef, ...)
。 (后者也会发出警告。)