Tôi đang cố xóa các ký hiệu được nhập để chúng không khả dụng dưới dạng các phương thức trong đối tượng, nhưng no
dường như không hoạt động, có thể tôi không hiểu, hoặc có cách khác.Làm thế nào để unimport một chức năng trong 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'), '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;
tiếc là tôi không thể sử dụng namespace::autoclean vì tôi đã bị hạn chế đến các module mà chỉ là một phần của perl lõi (yeah ngu ngốc nhưng c'est la vie).
mà không cần viết lại namespace::autoclean
có cách nào để thực hiện việc này không?
Tại sao bạn không thể làm những gì không gian tên :: tự động làm sạch điều này? Nó làm những gì bạn muốn, nhưng ngay cả khi không sử dụng nó như một mô-đun bạn muốn tránh làm những gì nó làm, như thể nó tồn tại không có lý do chính đáng vì phải có một cách đơn giản hơn để hoàn thành công việc. –
@briandfoy nó có thể là tôi có thể, nhưng tôi figured có thể có một cách đơn giản. – xenoterracide