Tengo el siguiente (idealizado de un insecto) script cortos en Perl:¿Por qué mi hash no es undef?
my %metadata = undef;
if (defined %metadata)
{
print "defined";
}
Por alguna razón, la salida del programa siempre está "definido". Por lo tanto, establecer el hash para que sea "indefinido" de alguna manera lo define. ¿Se define como "indefinido"?
EDIT:
Este es un caso idealizado, en un intento de reproducir el problema. Lo que estoy haciendo realmente es más como:
my %metadata = my_sub_function();
if (defined %metadata)
{
print "defined";
}
donde la salida de my_sub_function puede ser undef,() o un hash poblada, y sólo desea imprimir "definido" en el último de estos casos.
EDIT 2:
Incidentalmente he encontrado que
if (scalar(keys %metadata)
comporta correctamente para(), pero todavía no para undef.
¿el '' my_sub_function' hacer un retorno a undef' i ndicar el fracaso o no hay datos? Si es así, probablemente debería hacer un 'retorno' desnudo en su lugar. Eso se interpretaría como 'undef' en el contexto escalar y'() '(la lista vacía) en el contexto de la lista. –