我正在使用 perl。我不断收到这些错误
Constant subroutine Samp::foo redefined at /usr/local/share/perl/5.20.2/constant.pm
Constant subroutine Samp::bar redefined at /usr/local/share/perl/5.20.2/constant.pm
Constant subroutine Samp::baz redefined at /usr/local/share/perl/5.20.2/constant.pm
我如何追踪重新定义它们的因素。使用强力方法,我能够通过从 use base qw/quz qaz/
到 use base 'qaz'
中删除复合语句一次来抑制此错误。我认为这表明我遇到了其他一些错误。如果您知道如何添加此调试代码,我可以破解 constant.pm
。
如果有一个 Devel::
模块可以帮助我,或者有一个替代的工作流来解决这个问题,也会支持。
问题好像是documented here .
最佳答案
我建议使用 Carp 库。
这是一个最小的例子:
Foo.pm
package Foo;
use Exporter 'import';
@EXPORT_OK = qw( abc );
use constant abc => 123;
1;
foo.pl
#!/usr/bin/env perl
use strict;
use warnings;
use Foo qw( abc );
use Carp;
$Carp::Verbose = 1;
$Carp::CarpLevel = 2;
$SIG{__WARN__} = sub { carp(@_) };
print "Before redefine\n";
eval "use constant abc => 456;";
print "After redefine\n";
perl foo.pl
Before redefine
Constant subroutine main::abc redefined at /usr/share/perl5/vendor_perl/constant.pm line 140.
at (eval 1) line 1.
main::BEGIN() called at (eval 1) line 1
eval {...} called at (eval 1) line 1
eval 'use constant abc => 456;' called at foo.pl line 13
After redefine
关于perl - 使用 Perl,如何跟踪常量被重新定义的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36759359/