perl - 使用 Perl,如何跟踪常量被重新定义的位置?

标签 perl compiler-warnings circular-dependency

我正在使用 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/

相关文章:

字符串匹配问题

java - 未使用字段 'nameOfField' 的值 - Java Swing

compiler-errors - 不稳定的混音编译器错误 “Unknown exception during compilation”

c# - 当依赖是循环时,如何在 Startup.cs 中实现依赖注入(inject)?

c++ - 如何解决 Boost::BGL 模板<->类循环依赖?

c++ - 如何解析依赖类?

regex - 如何将替换表达式中的正则表达式与 Perl 中的变量进行比较?

perl - Perl 的 Expect 有 autoexpect 吗?

perl - 如何从 Perl 发出 HTTP GET 请求?

c++ - 有选择地仅对翻译单元的一部分禁用 GCC 警告