无法通过包<文件名>错误定位对象方法<varname>

# Object.pm
sub update {
  $table = $self->DB_TABLE;
...
}

update函数在值更新时被触发,并且似乎被其他文件多次执行,其相关部分如下所示:

# Status.pm
use constant DB_TABLE => 'Status';
# Flag.pm
use constant DB_TABLE => 'flag';

我不知道这个项目的内部运作,但修改Flag.pmObject.pm下面,因为我需要使用不同的表进行更新flag

# Flag.pm
use constant DB_TABLE => 'flag';
use constnat DB_UPDATE_TABLE => '<Table to use when updating flag>';
# Object.pm
sub update {
    my $table = undef;
    if($self->DB_UPDATE_TABLE) {
      $table = $self->DB_UPDATE_TABLE;
    } else {
      $table = $self->DB_TABLE; 
    }
}

当我触发时sub update,我得到

Can't locate object method "DB_UPDATE_TABLE" via package "<Status.pm>" at Object.pm.

有什么方法可以检查DB_UPDATE_TABLE每个文件中是否存在而没有错误?我可以将以下行添加到Status.pm,但有几十个文件,例如Status.pm.

Can't locate object method "DB_UPDATE_TABLE" via package "<Status.pm>" at Object.pm.

我不知道为什么$self->DB_TABLE不是,$self->{DB_TABLE}但假设它是一种方法......尝试了以下方法,但它也有自己的错误。

use constant DB_UPDATE_TABLE => '';
Bareword "DB_UPDATE_TABLE" not allowed while "strict subs" in use at Object.pm => I couldn't find the part to set 'strict subs'

回答

超级近!

$self->can( DB_UPDATE_TABLE )

应该

$self->can("DB_UPDATE_TABLE")


以上是无法通过包&lt;文件名&gt;错误定位对象方法&lt;varname&gt;的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>