无法通过包<文件名>错误定位对象方法<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.pm和Object.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")
THE END
二维码