2010-02-25 25 views
5

我正在嘗試創建一個哈希值,以保存添加密鑰的順序。在this page的「創建散列並保留加入順序」部分下,它給出了修改散列的片段,因此當您執行keys時,它將按照您將它們插入散列的順序返回鍵。在Perl中,如何在'use strict'開啓的情況下將Tie :: IxHash與字典一起使用?

當我做下面的代碼片段:

use strict; 
our %foo; 
use Tie::IxHash; 
tie (%foo, Tie::IxHash); 

它失敗:

Bareword "Tie::IxHash" not allowed while "strict subs" in use at /nfs/pdx/home/rbroger1/tmp.pl line 4. 
Execution of /nfs/pdx/home/rbroger1/tmp.pl aborted due to compilation errors. 

我怎樣才能得到領帶:: IxHash當use strict是在工作?

dsolimano的例子工作。

use strict; 
our %foo; 
use Tie::IxHash; 
tie (%foo, "Tie::IxHash"); 

$foo{c} = 3; 
$foo{b} = 2; 
$foo{a} = 1; 

print keys(%foo); 

打印:

cba 

沒有tie...Tie::IxHash線是

cab 

回答

8

的第二個參數tie是一個字符串,所以儘量

use strict; 
our %foo; 
use Tie::IxHash; 
tie (%foo, 'Tie::IxHash'); 
+0

果然。這工作。更新第車票與所述完整的例子 – 2010-02-25 02:37:31

+0

FWIW,CPAN的文檔是: '#簡單usage' '使用鐵:: IxHash;'' 扎HASHVARIABLE,領帶:: IxHash [,LIST];' 的沒有提到第二個參數是一個字符串! (但是使用引號的作品。) – Chap 2013-02-13 21:28:13

+0

看看perldoc - http://perldoc.perl.org/perltie.html,'tie VARIABLE,CLASSNAME,LIST',以及這些例子都使用'CLASSNAME'的字符串。我會說這是CPAN上Tie :: IxHash文檔的一個問題。 – dsolimano 2013-02-14 18:41:13

5

使用引號消除錯誤:

use strict; 
our %foo; 
use Tie::IxHash; 
tie (%foo, "Tie::IxHash"); 

它不提及POD,但它用於CPAN上的examples。請參閱tie

相關問題