Подтвердить что ты не робот

Что на самом деле делает ключевое слово `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? Когда и почему я должен его использовать?

4b9b3361

Ответ 1

no вызывает пакет unimport(), тогда как use вызывает import(), как тихо пропуская регистр, где не найден желаемый элемент.

Однако несколько пакетов - фактически, в основном только модули pragma - поддерживают unimport().