2010-02-25 12 views
5

Sto provando a creare un hash che conserva l'ordine di aggiunta delle chiavi. Sotto la sezione "Creare un hash e preservare l'add-ordine" di this page, dà un frammento che modifica un hash in modo che quando si fa keys restituisce le chiavi nell'ordine in cui li si è inserito nella hash.In Perl, come posso usare Tie :: IxHash con un dizionario mentre 'use strict' è attivo?

quando faccio il seguente frammento:

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

non riesce con:

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. 

Come posso ottenere Tie :: IxHash a lavorare quando è in use strict?

L'esempio di dsolimano ha funzionato.

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

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

print keys(%foo); 

stampe:

cba 

senza la linea tie...Tie::IxHash è

cab 

risposta

8

Il secondo argomento di tie è una stringa, in modo da provare

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

abbastanza sicuro. Ha funzionato. Aggiornamento biglietto esimo con il pieno ad esempio –

+0

FWIW, il doc CPAN è: '# semplice usage' ' utilizzare Tie :: IxHash; '' legare HASHVARIABLE, Tie :: IxHash [, LIST]; ' Nessuna menzione di il secondo argomento è una stringa! (Ma usando le virgolette funziona.) – Chap

+0

Guarda perldoc - http://perldoc.perl.org/perltie.html, 'tie VARIABILE, CLASSNAME, list', e gli esempi tutte le stringhe di utilizzo per' CLASSNAME'. Direi che è un problema con la documentazione di 'Tie :: IxHash' su CPAN. – dsolimano

5

Utilizzando citazioni elimina l'errore:

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

Non è menzionato in il POD, ma viene utilizzato nello examples su CPAN.

Vedere anche tie.

Problemi correlati