インポートされたシンボルをオブジェクトのメソッドとして使用できないように削除しようとしていますが、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 の一部にすぎないモジュールに制限されているためです (愚かですが、c'est la vie です)。
書き直すだけでなくnamespace::autoclean
、これを行う方法はありますか?