2010-02-25 19 views
5

Tôi đang cố gắng tạo một băm duy trì thứ tự mà các phím được thêm vào. Trong phần "Tạo một băm và bảo quản thứ tự thêm" của this page, nó cung cấp một đoạn mã sửa đổi một băm để khi bạn làm keys nó trả về các khóa theo thứ tự mà bạn đã chèn chúng vào băm.Trong Perl, làm thế nào tôi có thể sử dụng Tie :: IxHash với một từ điển trong khi 'sử dụng nghiêm ngặt' được bật?

Khi tôi làm đoạn sau:

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

Nó không thành công với:

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. 

Làm thế nào tôi có thể nhận được Tie :: IxHash để làm việc khi use strict là trên?

Ví dụ của dsolimano đã hoạt động.

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

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

print keys(%foo); 

in:

cba 

mà không có dòng tie...Tie::IxHash nó là

cab 

Trả lời

8

Đối số thứ hai để tie là một chuỗi, vì vậy hãy thử

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

đủ chắc chắn. Điều đó hiệu quả. Cập nhật vé thứ với đầy đủ ví dụ –

+0

FWIW, doc CPAN là: '# đơn giản usage' 'sử dụng Tie :: IxHash;' ' buộc HASHVARIABLE, Tie :: IxHash [, LIST]; ' Không đề cập đến thứ hai arg là một chuỗi! (Nhưng sử dụng báo giá hoạt động.) – Chap

+0

Nhìn vào perldoc - http://perldoc.perl.org/perltie.html, 'tie VARIABLE, CLASSNAME, LIST' và các ví dụ tất cả sử dụng chuỗi cho' CLASSNAME'. Tôi muốn nói đó là vấn đề với tài liệu 'Tie :: IxHash' trên CPAN. – dsolimano

5

Sử dụng dấu ngoặc kép giúp loại bỏ các lỗi:

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

Nó không được đề cập trong POD, nhưng được sử dụng trong số examples trên CPAN.

Xem thêm tie.

Các vấn đề liên quan