为什么 Scalar::Util 和 Test::大多数不能很好地配合使用?



以这个简单的测试用例为例:

#!/usr/bin/env perl
use Test::Most;
use Scalar::Util qw( reftype );
ok( 1, 'foo' );
done_testing();

运行此测试给我以下输出:

原型不匹配:sub main::reftype:none vs ($) 在/Users/olaf/perl5/perlbrew/perls/perl-5.16.2/lib/site_perl/5.16.2/Exporter.pm 第 66 行。

有两种方法可以摆脱此警告。

  • 我可以使用测试::更多而不是测试::大多数
  • 我可以使用测试::大多数但不明确导入引用类型

我可以调用 Scalar::Util::reftype(甚至使用另一个模块),但我正在寻找调试此问题的一些帮助,以便我可以提交适当的错误报告,因为我不确定警告的根本原因在哪里。

Test::MostScalar::Util都定义了名为reftype的函数,并且您调用use的方式会导致两个模块都尝试将其reftype函数导出到调用包。有时这会触发Subroutine ... redefined警告,但在这种情况下,Scalar::Util::reftype希望用原型定义自己,因此冲突是一个更严重的错误。

调用Scalar::Util::reftype($ref)以外的一些选项:

一、定义并使用不同的别名Scalar::Util::reftype

    使用 Scalar::Util ();     BEGIN { *su_reftype = *Scalar::Util::reftype; }     打印"reftype is ", su_reftype($ref), " ...";

二。加载Scalar::Util之前从符号表中删除reftype

   使用测试::大多数;    开始 { *{reftype} = '' }    使用 Scalar::Util 'reftype';

相关内容

最新更新