“严格参考”错误的原因

时间:2014-01-10 01:33:11

标签: perl

我对一个对象有一个奇怪的问题(扩展了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
}

1 个答案:

答案 0 :(得分:2)

您在某个地方Table("", ...)Table(undef, ...)。 (后者也会发出警告。)