2012-04-25 14 views
11

Mi previous question ha resuelto mi problema, pero me ha dejado con una falta de comprensión.¿Qué significa realmente la palabra clave "no" en 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'); 

Esta prueba no pasa, lo que significa no ... no hago lo que creo que sí, que incluye unimporting los símbolos. He leído perldoc no, pero realmente parece bastante poco esclarecedor. Teniendo en cuenta los resultados de este código, diría que no hace exactamente lo que anuncia.

¿Qué hace no hacer? ¿Cuándo y por qué debería usarlo?

Respuesta

15

no llama a un paquete unimport(), mientras que use llama a , omitiendo silenciosamente el caso donde no se encuentra el sub deseado.

Sin embargo, pocos paquetes, de hecho, principalmente solo los módulos pragma, admiten unimport().

+5

Se podría argumentar que 'Exporter' no define un' unimport' para ir con su 'import' es un error. – geekosaur

+0

@geekosaur, estoy de acuerdo. (Podria argumentarse :)) – pilcrow

Cuestiones relacionadas