2010-02-25 8 views
5

Estoy tratando de crear un hash que preserve el orden en que se agregan las claves. En la sección "Crear un hash y conservar el orden adicional" de this page, da un fragmento que modifica un hash para que cuando lo haga keys devuelva las claves en el orden en que las insertó en el hash.En Perl, ¿cómo puedo usar Tie :: IxHash con un diccionario mientras está activado 'use strict'?

cuando lo haga el siguiente fragmento:

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

falla 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. 

¿Cómo puedo obtener Tie :: IxHash a trabajar cuando está en use strict?

Ejemplo de dsolimano funcionó.

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

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

print keys(%foo); 

impresiones:

cba 

sin la línea tie...Tie::IxHash es

cab 

Respuesta

8

El segundo argumento de tie es una cadena, así que intenta

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

lo suficientemente seguro. Eso funciono. Actualización º billete con la plena ejemplo –

+0

Fwiw, el doc CPAN es: '# sencilla usage' ' utilizar Tie :: IxHash; '' empate HASHVARIABLE, Tie :: IxHash [LIST]; 'No hay mención de ¡Segundo arg siendo una cuerda! (Pero el uso de comillas funciona.) – Chap

+0

Mira perldoc - http://perldoc.perl.org/perltie.html, 'ata VARIABLE, CLASSNAME, LIST', y todos los ejemplos usan cadenas para' CLASSNAME'. Diría que es un problema con la documentación 'Tie :: IxHash' en CPAN. – dsolimano

5

se emplean comillas elimina el error:

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

No se menciona en el POD, pero se usa en el examples en CPAN.

Véase también tie.

Cuestiones relacionadas