2011-08-29 81 views
1

我想在一個包中定義一些常量,然後在另一個包中使用它們,但我似乎沒有這樣做!在第一張照片我得​​到如何在Perl中打印導出的模塊常量?

裸詞「FAVORITE_COLOR」不允許的,而在使用「嚴格潛艇」 ......

我想這是因爲我沒有使用的基本路徑我包在lib()函數,

模塊 我/ Colors.pm

package My::Colors; 

BEGIN { 
    use Exporter; 
    our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); 
    $VERSION  = 1.00; 
    @ISA   = qw(Exporter); 
    @EXPORT  = qw(); 
    @EXPORT_OK = qw(FAVORITE_COLOR DISLIKED_COLOR); 
    %EXPORT_TAGS = ('all' => [ @EXPORT, @EXPORT_OK ], 'const' => [ 'FAVORITE_COLOR', 'DISLIKED_COLOR']); 

} 
our @EXPORT_OK; 

use lib qw(/home/dev); 

use Carp; 


use constant {  
    DISLIKED_COLOR => "green", 
    FAVORITE_COLOR => "red" 
}; 

sub new { 
my($class, %args) = @_; 
my $self = bless({}, $class); 
my $target = exists $args{target} ? $args{target} : "new"; 
$self->{target} = $target; 
return $self; 
} 


1; 

模塊,包括出口常數 color_driver.plx

#!/usr/bin/perl -w 
use warnings; 
use strict; 
use diagnostics; 

use lib qw(/home/dev/My); 
use Colors; 
use Colors qw(:const); 


sub main{ 
    my $color = new Colors; 
    print "Color is",FAVORITE_COLOR; 

} 

main(); 

任何知道我做錯了嗎?

當我刪除嚴格不斷犯規轉化爲它的價值=/

更新 不幸的是,現在Perl是抱怨說,它無法找到新的子

無法找到對象的方法「新」 通過包 「顏色」 在color_driver.plx線(也許你 忘記 負荷 「顏色」?)15(#1)

回答

3

在模塊:

package My::Colors; 

在腳本:

use lib qw(/home/dev/My); 
use Colors qw(:const); 

my $color = new Colors; 

要麼改變該模塊的那些行

package Colors; 

或改變腳本的那些行

use lib qw(/home/dev); 
use My::Colors qw(:const); 

my $color = new My::Colors; 

use Colors qw(:const); 

幾乎是相同的

BEGIN { 
    require Colors; 
    Colors->import(qw(:const)); 
} 

你告訴Perl的在Colors包/命名空間來尋找import(和new),但模塊填充封裝/命名空間My::Colors

+0

哇這種工作 - 新仍然沒有工作,但當我把新的呼籲,其他常數工作。但是如果我把正確的路徑放在lib()函數中,爲什麼我必須包含完整的Package路徑?我想只是使用顏色qw(:const) – qodeninja

+0

@codeninja,當時你發佈的內容沒有'new'。無論如何,更新。 – ikegami

+0

--- oic !!!該包也必須與lib()配合!謝謝^ _^- 對不起,我正在更新和測試當你評論時 - 我試着同步所有內容並同時更新問題 - 所以不要生氣!如果你能在那裏修正那麼一點票,我想我們都可以快樂!再次感謝你! – qodeninja