2008-11-21 13 views

Respuesta

17

Deberá usar un hash vinculado. Por ejemplo Hash::Case::Preserve.

+0

Me pregunto cuáles son las penalizaciones de velocidad y espacio que existen para esta implementación, en comparación con solo asegurarse de que las personas obtengan sus claves hash en el caso correcto en primer lugar. –

+0

No debería costar mucho en el espacio, aunque definitivamente costará a tiempo. Habiendo dicho eso, en la mayoría de los casos no importará mucho en mi humilde opinión. –

8

El hash de una cuerda y la misma cuerda con la caja cambiada no son iguales. Entonces no puedes hacer lo que quieras, excepto llamar "uc" en cada tecla hash antes de crearla Y antes de usarla.

5
my %hash = (FOO => 1); 
my $key = 'fOo'; # or 'foo' for that matter 

my %lookup = map {(lc $_, $hash{$_})} keys %hash; 
printf "%s\n", (exists $hash{(lc $key)}) ? "Yes" : "No"; 
+0

Me gusta a dónde va con esto, pero cuando lo ejecuto en ActiveState Perl en Win32, obtengo un "No". Creo que se refería a: (existe $ lookup {(lc $ key)})? "Si no" – mseery

0

grep debe hacer el truco si haces el caso de coincidencia de patrón insensible:

perl -e '%hash = (FOO => 1); printf "%s\n", (scalar(grep (/^foo$/i, keys %hash)) > 0) ? "Yes" : "No";'

Si usted tiene más de una clave con varios ortografía puede que tenga que comprobar si el partido es mayor de 1 también.

Cuestiones relacionadas