以这个简单的测试用例为例:
#!/usr/bin/env perl
use Test::Most;
use Scalar::Util qw( reftype );
ok( 1, 'foo' );
done_testing();
Run Code Online (Sandbox Code Playgroud)
运行这个测试给了我以下输出:
原型不匹配:sub main::reftype: none vs ($) at /Users/olaf/perl5/perlbrew/perls/perl-5.16.2/lib/site_perl/5.16.2/Exporter.pm 第 66 行。
有两种方法可以消除此警告。
我可以调用 Scalar::Util::reftype(甚至使用另一个模块),但我正在寻找调试此问题的一些帮助,以便我可以提交适当的错误报告,因为我不确定至于警告的根本原因在哪里。
这两个Test::Most和Scalar::Util定义函数调用reftype,并且您呼叫的方式use使这两个模块,试图把它们出口reftype功能调用包。有时这会触发Subroutine ... redefined警告,但在这种情况下Scalar::Util::reftype想用原型定义自己,因此冲突是一个更严重的错误。
除了调用之外的一些选项Scalar::Util::reftype($ref):
一。定义和使用不同的别名Scalar::Util::reftype
使用标量::Util();
开始 { *su_reftype = *Scalar::Util::reftype; }
打印 "reftype 是 ", su_reftype($ref), " ...";
二。reftype加载前从符号表中删除Scalar::Util:
使用测试::大多数;
开始 { *{reftype} = '' }
使用 Scalar::Util 'reftype';