无法通过包 <file name> 错误定位对象方法 <var name>
Can't locate object method <var name> via package <file name> error
# 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
如下,因为我需要使用不同的 table 来更新 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
.
use constant DB_UPDATE_TABLE => '';
我不知道为什么它是 $self->DB_TABLE
而不是 $self->{DB_TABLE}
但假设它是一种方法...尝试了以下方法,但它也有自己的错误。
if( my $ref = eval { $self->can( DB_UPDATE_TABLE ) } ) {
$table = $self->DB_UPDATE_TABLE;
} else {
$table = $self->DB_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")
# 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
如下,因为我需要使用不同的 table 来更新 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
.
use constant DB_UPDATE_TABLE => '';
我不知道为什么它是 $self->DB_TABLE
而不是 $self->{DB_TABLE}
但假设它是一种方法...尝试了以下方法,但它也有自己的错误。
if( my $ref = eval { $self->can( DB_UPDATE_TABLE ) } ) {
$table = $self->DB_UPDATE_TABLE;
} else {
$table = $self->DB_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")