12

私の前の質問は私の問題を解決しました、しかし私に理解の欠如を残しました。

use 5.014;
use warnings;
use Test::More;

# still has carp after no Carp
package Test0 {
    use Carp qw( carp );
    sub new {
        my $class = shift;
        my $self  = {};

        carp 'good';

        bless $self, $class;
        return $self;
    }
    no Carp;
}

my $t0 = Test0->new;

ok( ! $t0->can('carp'), 'cannot carp');

このテストは合格しませんno ...。つまり、シンボルのインポートを解除するなど、私が思うことを実行しません。私は読んperldoc noだことがありますが、それは実際にはかなり啓蒙的ではないようです。このコードの結果を考えると、それが宣伝していることを正確に実行しているわけではないと思います。

何をしnoますか?いつ、なぜそれを使用する必要がありますか?

4

1 に答える 1

16

noパッケージのunimport()を呼び出しますが、useを呼び出しますimport()。どちらも、目的のサブが見つからない場合を黙ってスキップします。

ただし、をサポートするパッケージはほとんどありません。実際、ほとんどの場合、プラグマモジュールのみunimport()です。

于 2012-04-25T18:39:12.520 に答える