2014-01-20 40 views
0

內使用預先定義的EXPORT_TAGS我已經創建了幾個EXPORT_TAGS我的模塊如下內,出口和EXPORT_OK

package My::Module; 

use strict; 
use warnings; 

require Exporter; 

our @ISA = qw (Exporter); 

our %EXPORT_TAGS = (
    'set1' => [ 
     qw(
      &func1 
      &func2 
     ) 
    ], 
    'set2' => [ 
     qw(
      $var1 
      $var2 
     ) 
    ], 
    'set3' => [ 
     qw(
      &sub3 
      &sub4 
     ) 
    ] 
); 

# remaining module code 

我現在想通過簡單地給予申報出口中導出的符號和EXPORT_OK陣列出口標籤,而不是指定每個單獨的一個,

our @EXPORT = $EXPORT_TAGS { 'set2' }; 
our @EXPORT_OK = (
    $EXPORT_TAGS { 'set1' }, 
    $EXPORT_TAGS { 'set3' } 
); 

在我的目標腳本,我調用我的模塊如下,

use My::Module qw (:set1 :set3); 

該模塊編譯沒有錯誤。然而,目標腳本不和我收到以下錯誤,當我嘗試使用屬於該模塊的變量/功能,

Global symbol "$var1"需要name`

我缺少/俯瞰明確的包?謝謝您的幫助。

回答

1

%EXPORT_TAGS中的東西是arrayrefs;您需要解除引用,將它們拼合成@EXPORT@EXPORT_OK。你想寫:

our @EXPORT = @{ $EXPORT_TAGS { 'set2' } }; 
our @EXPORT_OK = (
    @{ $EXPORT_TAGS { 'set1' } }, 
    @{ $EXPORT_TAGS { 'set3' } }, 
); 
+0

謝謝!這適用於子程序,但由於某種原因,當我嘗試訪問模塊變量時,即使它們已在模塊中聲明和定義,我也會收到變量未初始化的錯誤。這可能是什麼原因? –

+0

明白了,我使用'my'而不是'our',所以這些值沒有與我的目標腳本共享。 –