3

次の簡単なテスト ケースを使用します。

#!/usr/bin/env perl

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

ok( 1, 'foo' );

done_testing();

このテストを実行すると、次の出力が得られます。

プロトタイプの不一致: sub main::reftype: none vs ($) at /Users/olaf/perl5/perlbrew/perls/perl-5.16.2/lib/site_perl/5.16.2/Exporter.pm 66 行目。

この警告を取り除くには 2 つの方法があります。

  • Test::Most ではなく Test::More を使用できます
  • Test::Most を使用できますが、reftype を明示的にインポートすることはできません

Scalar::Util::reftype を呼び出す (または別のモジュールを使用する) ことは問題ありませんが、この問題をデバッグするための助けを探して、適切なバグ レポートを提出できるようにしています。警告の根本原因がどこにあるかについて。

4

1 に答える 1

5

Test::Mostとは、とScalar::Util呼ばれる関数を定義します。呼び出し方法により、両方のモジュールがそれらの関数を呼び出し元のパッケージにエクスポートしようとします。これにより警告がトリガーされる場合がありますが、この場合はプロトタイプで自分自身を定義する必要があるため、競合はより深刻なエラーになります。reftypeusereftypeSubroutine ... redefinedScalar::Util::reftype

呼び出し以外のいくつかのオプションScalar::Util::reftype($ref)

1。の別のエイリアスを定義して使用するにはScalar::Util::reftype

     Scalar :: Util();を使用します。
     BEGIN {* su_reftype = * Scalar :: Util :: reftype; }
     print "reftype is"、su_reftype($ ref)、 "...";

二。reftypeロードする前にシンボルテーブルから削除しますScalar::Util

    Test::Mostを使用します。
    BEGIN {* {reftype} =''}
    Scalar ::Util'reftype'を使用します。
于 2012-12-05T21:42:52.703 に答える