2012-04-25 7 views
11

私のprevious questionは私の問題を解決しましたが、理解が足りなくなりました。キーワード `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'); 

このテストでは、シンボルをunimporting含む、no ...は、私はそれがないと思う何をしないことを意味する、渡しません。私はperldoc noを読んだことがありますが、それは本当にむしろ啓蒙されているようです。このコードの結果を考えれば、それは広告するものを正確に実行していないと言えます。

noは何をしますか?いつ、どうして私はそれを使用すべきですか?

答えて

15

noは、パッケージのunimport()を呼び出すのに対し、useは、import()を呼び出します。両方とも、希望するサブが見つからない場合を黙ってスキップします。

しかし、実際にはほとんどのプラグマモジュールのみがunimport()をサポートしています。

+5

「輸出」は、その「輸入」と一緒に行くために「unimport」を定義していないことがバグであると主張することができます。 – geekosaur

+0

@geekosaur、私は同意します。 (それは議論することができる:) – pilcrow

関連する問題