Me gustaría utilizar una "expresión regular compilada" (es decir, una expresión en el formato qr/../
) como clave para una estructura hash.reconociendo "tipo" de claves hash
Para discernir entre cadenas constantes y estas expresiones regulares cuando se itera sobre los Keyes de hash, que estaba tratando de utilizar ref()
o is_regexp()
, pero el primero devuelve una cadena nula, y este último no funciona. Me temo que me está perdiendo algo fundamental sobre Perl refs vs. escalares.
Aparte de eso, mi solución parece funcionar. ¿Es demasiado feo de todos modos? Cualquier propuesta alternativa es bienvenida.
algo de código para entender ref()
función:
my $regex = qr/foo/;
printf "ref(\$regex): %s \n", ref($regex);
printf "is_regexp(\$regex): %d \n", is_regexp($regex);
# ref($regex): Regexp
# is_regexp($regex): 1
my $scalar = 3;
printf "ref(\$scalar): [%s] \n", ref($scalar);
# ref($scalar): []
my %my_hash = ('name', 'Becky', 'age', 23);
for my $k (keys %my_hash) {
printf "%s [%s] -> %s [%s] \n", $k, ref($k), $my_hash{$k}, ref($my_hash{$k});
}
# name [] -> Becky []
# age [] -> 23 []
Las claves en un hash son cadenas. 'ref' siempre devolverá' undef' para esos. Si usa algo como una clave que no es una cadena, se convierte en cadena. – Qtax