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 回答