gpt4 book ai didi

perl - 为什么 Scalar::Util 和 Test::Most 不能很好地协同工作?

转载 作者:行者123 更新时间:2023-12-01 06:17:09 25 4
gpt4 key购买 nike

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

#!/usr/bin/env perl

use Test::Most;
use Scalar::Util qw( reftype );

ok( 1, 'foo' );

done_testing();

运行此测试会得到以下输出:

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

有两种方法可以消除此警告。

  • 我可以使用 Test::More 而不是 Test::Most
  • 我可以使用 Test::Most 但不能显式导入 reftype

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

最佳答案

Test::MostScalar::Util 都定义了名为 reftype 的函数,以及调用 use< 的方式 导致两个模块尝试将它们的 reftype 函数导出到调用包。有时这会触发一个 Subroutine ... redefined 警告,但在这种情况下 Scalar::Util::reftype 想要用原型(prototype)定义自己,所以冲突是更严重的错误。

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

一个。为 Scalar::Util::reftype

定义和使用不同的别名
     use Scalar::Util ();     BEGIN { *su_reftype = *Scalar::Util::reftype; }     print "reftype is ", su_reftype($ref), " ...";

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

    use Test::Most;    BEGIN { *{reftype} = '' }    use Scalar::Util 'reftype';

关于perl - 为什么 Scalar::Util 和 Test::Most 不能很好地协同工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13732647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com