问题 关键字“no”在Perl中实际上做了什么?


我的 上一个问题 已经解决了我的问题,但让我缺乏理解。

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 做?何时以及为何要使用它?


4444
2018-04-25 18:29


起源



答案:


no 叫一个包 unimport(),而 use 电话 import(),都默默地跳过没有找到所需子的情况。

但是,很少有软件包 - 实际上只有pragma模块 - 支持 unimport()


15
2018-04-25 18:39



可以说是这样的 Exporter 没有定义 unimport 与它一起去 import 是个bug。 - geekosaur
@geekosaur,我同意。 (可以争论:)) - pilcrow


答案:


no 叫一个包 unimport(),而 use 电话 import(),都默默地跳过没有找到所需子的情况。

但是,很少有软件包 - 实际上只有pragma模块 - 支持 unimport()


15
2018-04-25 18:39



可以说是这样的 Exporter 没有定义 unimport 与它一起去 import 是个bug。 - geekosaur
@geekosaur,我同意。 (可以争论:)) - pilcrow