2012-04-25 25 views
11

Mój previous question rozwiązał mój problem, ale pozostawił mnie z brakiem zrozumienia.Co właściwie oznacza słowo kluczowe "nie" w Perlu?

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'); 

Ten test nie przechodzi, co oznacza no ... nie robić to, co myślę, że robi, co obejmuje unimporting symbole. Przeczytałem perldoc no, ale to naprawdę wydaje się raczej nieoświetlające. Biorąc pod uwagę wyniki tego kodu, powiedziałbym, że nie robi dokładnie tego, co reklamuje.

Co robi no? Kiedy i dlaczego powinienem go używać?

Odpowiedz

15

no nazywa pakiet na unimport(), natomiast use wzywa import(), zarówno w milczeniu pomijam przypadek, w którym nie znajduje się żądany sub.

Jednak niewiele pakietów - w istocie, głównie tylko moduły pragma - obsługuje unimport().

+5

Można argumentować, że 'Exporter' nie definiujący' unimport', aby przejść do 'importu' jest błędem. – geekosaur

+0

@geekosaur, zgadzam się. (Można się z tym nie zgodzić :)) – pilcrow