Necesito determinar si un hash Perl tiene una clave dada, pero esa clave se asignará a un valor undef. Específicamente, la motivación para esto es ver si boolean flags mientras usa getopt()
con una referencia de hash pasada al mismo. Ya he buscado en este sitio y en google, y exists()
y defined()
no parecen ser aplicables para la situación, solo ven si el valor para una clave dada no está definido, no verifican si el hash en realidad tiene el llave. Si hago un RTFM aquí, remítame al manual que explica esto.¿Cómo puedo determinar si un hash Perl contiene una asignación de teclas a un valor indefinido?
Respuesta
existe() y definido() no parecen ser aplicables a la situación, que acaba de ver si el valor de una clave dada no está definido, se no compruebe si el hash realmente tiene la clave
Incorrecto. Eso es precisamente lo que defined()
hace, pero exists()
hace exactamente lo que quiere:
my %hash = (
key1 => 'value',
key2 => undef,
);
foreach my $key (qw(key1 key2 key3))
{
print "\$hash{$key} exists: " . (exists $hash{$key} ? "yes" : "no") . "\n";
print "\$hash{$key} is defined: " . (defined $hash{$key} ? "yes" : "no") . "\n";
}
produce:
$hash{key1} exists: yes $hash{key1} is defined: yes $hash{key2} exists: yes $hash{key2} is defined: no $hash{key3} exists: no $hash{key3} is defined: no
La documentación de estas dos funciones se encuentra disponible en la línea de comandos en perldoc -f defined
y perldoc -f exists
(o lea la documentación para todos los métodos en perldoc perlfunc
*). La documentación oficial web es aquí:
* Ya que menciona específicamente RTFM y puede que no sea consciente de la ubicación de la documentación de Perl, también quisiera señalar que puede obtener un índice completo de todos los perldocs en perldoc perl
o en http://perldoc.perl.org.
Si estoy leyendo su pregunta correctamente, creo que está confundido acerca de exists. A partir de la documentación:
existe EXPR
Dada una expresión que especifica un elemento de hash o elemento de la matriz, devuelve cierto si el elemento especificado en el de hash o conjunto siempre ha sido inicializado, incluso si el valor correspondiente no está definido.
Por ejemplo:
use strict;
use warnings;
my %h = (
foo => 1,
bar => undef,
);
for my $k (qw(foo bar baz)){
print $k, "\n" if exists $h{$k} and not defined $h{$k};
}
Respuesta corta:
if (exists $hash{$key} and not defined $hash{$key}) {
...
}
- 1. Perl: Asignación de una matriz a un hash
- 2. Perl, ¿cómo determinar si un valor variable es un número?
- 3. ¿Cómo puedo llamar a una subrutina cuyo nombre es un valor en un hash, en Perl?
- 4. ¿Cómo determinar si una lista vinculada contiene un bucle?
- 5. ¿Cómo saber si un hash Perl es multidimensional?
- 6. ¿Cómo presiono un valor en un hash Perl de matrices?
- 7. ordenar una matriz de Hash de múltiples teclas Perl
- 8. ¿Cómo puedo verificar si una cadena Perl contiene letras?
- 9. ¿Cómo accedo al valor de un hash Perl anidado?
- 10. Determinar si existe un valor en una matriz de valores hash
- 11. ¿Cómo puedo interpolar un elemento hash Perl en una cadena?
- 12. ¿Cómo convierto una matriz a un hash en Perl?
- 13. ¿Cómo puedo hacer un hash Perl desde una matriz con las teclas y otra matriz con los valores?
- 14. ¿Cómo paso un hash a una función en Perl?
- 15. ¿Cómo se determina si una lista bidimensional contiene un valor?
- 16. ¿Cómo puedo determinar si un manejador de archivo Perl es un manejador de lectura o escritura?
- 17. ¿Cómo puedo determinar si una URL redirige?
- 18. ¿Cómo puedo determinar si existe un hash git dado en una rama determinada?
- 19. ¿Cómo puedo determinar si existe una función Perl en el tiempo de ejecución?
- 20. ¿Cómo puedo ver si un hash Perl ya tiene una determinada clave?
- 21. Cómo determinar si una cadena contiene una subcadena específica
- 22. En Perl, ¿cómo puedo ordenar por frecuencia de un valor?
- 23. ¿Cómo puedo determinar si un objeto implementa un método en Perl?
- 24. Perl ¿Cómo recupero una matriz de un hash de matrices?
- 25. Mapeo de las teclas de un hash
- 26. ¿Verifica si una variable contiene un valor numérico en Javascript?
- 27. QTP: comprobación Si una matriz de cadenas contiene un valor
- 28. determinar si una lista contiene otras listas
- 29. cómo verificar si un hash está vacío en perl
- 30. ¿Cómo puedo usar 's ///' si mi cadena contiene un '/'?