【发布时间】:2012-04-25 10:58:41
【问题描述】:
我正在尝试删除导入的符号,以便它们不能作为对象中的方法使用,但no 似乎不起作用,也许我不明白,或者还有其他方法。
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'), 'can not carp');
# below passes correctly
package Test1 {
use Carp qw( carp );
use namespace::autoclean;
sub new {
my $class = shift;
my $self = {};
carp 'good';
bless $self, $class;
return $self;
}
}
my $t1 = Test1->new;
ok( ! $t1->can('carp'), 'can not carp');
done_testing;
不幸的是,我不能使用namespace::autoclean,因为我被限制在只属于核心 perl 一部分的模块中(是的,很愚蠢,但这是我的生活)。
不只是重写namespace::autoclean 有没有办法做到这一点?
【问题讨论】:
-
为什么你不能做什么 namespace::auto clean 这样做?它做你想做的事,但即使不将它用作模块,你也想避免做它做的事,好像它的存在没有充分的理由,因为必须有一种更简单的方法来完成工作。
-
@briandfoy 我有可能,但我想可能有更简单的方法。
标签: perl