hashes perl hash

hash of hashes perl



¿Cómo puedo hacer que la búsqueda de la tecla hash no distinga entre mayúsculas y minúsculas? (4)

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

Evidentemente, las claves hash se comparan de una manera que distingue entre mayúsculas y minúsculas.

$ perl -e ''%hash = ( FOO => 1 ); printf "%s/n", ( exists $hash{foo} ) ? "Yes" : "No";'' No $ perl -e ''%hash = ( FOO => 1 ); printf "%s/n", ( exists $hash{FOO} ) ? "Yes" : "No";'' Yes

¿Hay alguna configuración para cambiar eso para el script actual?


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.


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";


grep debería hacer el truco si haces que el patrón de coincidencia de mayúsculas y minúsculas sea insensible:

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

Si tiene más de una tecla con varias ortografías, es posible que deba verificar si la coincidencia es mayor a 1 también.