2012-09-15 37 views
1

這是我第一次使用模塊。我正在嘗試將模塊中存在的哈希內容檢索到主Perl代碼中。從模塊中獲取哈希到主Perl代碼

下面是模塊DRUG.pm

package DRUG; 
require Exporter; 

our @ISA = qw(Exporter); 
our @EXPORT = qw(%DRUG); 

%DRUG = (
    'warfarin ' => 1, 
    'midazolam ' => 1, 
    'acebutolol ' => 1, 
); 

這裏是主程序,試圖訪問本哈希模塊

use warnings; 
use strict; 
use DRUG; 

foreach my $nme (keys %DRUG){ 
print "$nme\n"; 
} 

我無法從模塊獲得的哈希信息,並可能在不在主Perl代碼中打印該散列。

有人可以幫我嗎?

感謝

+0

我宣佈使用藥物名稱而不是使用藥物;在主程序中。剛剛編輯。 –

+0

你不應該解決你的問題中的問題。它使得答案讀得相當奇怪 – Borodin

回答

3

不應該

use DrugNames; 

use DRUG; 

你在DRUGS.pm結束需要一個1;

+0

我已經修正了你的建議。我仍然收到以下錯誤:全局符號「%DRUG1」需要在invitro.pl第11行顯式包名。 invitro.pl的執行由於編譯錯誤而中止。 –

1

雖然簡單易用出口商使DRUG的內容可用, 使用「訪問者「方法通常是優選的。

這樣做的好處是您的當前名稱空間不會受到包中變量的「污染」。

此外,如果你不希望有內容改變考慮使變量只讀。

文件main.pl

`

use warnings; 
use strict; 
use DRUG; 

my $drug = DRUG->get_drug(); 
foreach my $nme (keys %$drug){ 
    print "$nme\n"; 
} 

`

文件DRUG.pm

`

package DRUG; 
use strict; 
use Readonly; 

Readonly my $DRUG => { 
    'warfarin ' => 1, 
    'midazolam ' => 1, 
    'acebutolol ' => 1, 
}; 

sub get_drug{ 
    return $DRUG; 
} 

1; 

`