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

Puf*_*ers 4 perl

# Object.pm
sub update {
  $table = $self->DB_TABLE;
...
}
Run Code Online (Sandbox Code Playgroud)

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

# Status.pm
use constant DB_TABLE => 'Status';
Run Code Online (Sandbox Code Playgroud)
# Flag.pm
use constant DB_TABLE => 'flag';
Run Code Online (Sandbox Code Playgroud)

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

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

当我触发时sub update,我得到

Can't locate object method "DB_UPDATE_TABLE" via package "<Status.pm>" at Object.pm.
Run Code Online (Sandbox Code Playgroud)

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

Can't locate object method "DB_UPDATE_TABLE" via package "<Status.pm>" at Object.pm.
Run Code Online (Sandbox Code Playgroud)

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

use constant DB_UPDATE_TABLE => '';
Run Code Online (Sandbox Code Playgroud)
Bareword "DB_UPDATE_TABLE" not allowed while "strict subs" in use at Object.pm => I couldn't find the part to set 'strict subs'
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 6

超级近!

$self->can( DB_UPDATE_TABLE )
Run Code Online (Sandbox Code Playgroud)

应该

$self->can("DB_UPDATE_TABLE")
Run Code Online (Sandbox Code Playgroud)