【问题标题】:What does the keyword `no` actually do in Perl?关键字 `no` 在 Perl 中实际上做了什么?
【发布时间】:2012-04-26 06:21:56
【问题描述】:

我的previous question 解决了我的问题,但让我缺乏理解。

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 是做什么的?我应该什么时候以及为什么要使用它?

【问题讨论】:

    标签: perl module


    【解决方案1】:

    no 调用包的unimport(),而use 调用import(),两者都默默地跳过找不到所需子的情况。

    然而,很少有软件包——事实上,大部分只有编译指示模块——支持unimport()

    【讨论】:

    • 可以说Exporter 没有定义unimport 以配合其import 是一个错误。
    • @geekosaur,我同意。 (可以争论:))
    猜你喜欢
    • 2015-03-21
    • 1970-01-01
    • 2013-06-02
    • 2020-11-21
    • 2015-02-26
    • 2017-06-29
    • 2013-06-13
    • 2021-10-25
    • 2011-08-12
    相关资源
    最近更新 更多