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.