Je le script ci-dessous (idéalisée d'un bug) en Perl:Pourquoi mon hash n'est-il pas indéfini?
my %metadata = undef;
if (defined %metadata)
{
print "defined";
}
Pour une raison quelconque la sortie du programme est toujours « défini ». Le réglage du hash pour qu'il soit "indéfini" le rend en quelque sorte défini. Est-ce défini comme étant "indéfini"?
EDIT:
Ceci est un cas idéalisé, dans une tentative de reproduire le problème. Ce que je suis en fait de faire est plus comme:
my %metadata = my_sub_function();
if (defined %metadata)
{
print "defined";
}
Lorsque la sortie de my_sub_function peut être indéfinies,() ou un hachage peuplé, et je veux seulement imprimer « défini » dans le dernier de ces cas.
EDIT 2:
Soit dit en passant, j'ai trouvé que
if (scalar(keys %metadata)
se conduit correctement pour(), mais pas encore pour le FNUD.
Est-ce que '' my_sub_function' faire retour undef' i Indiquer un échec ou aucune donnée? Si c'est le cas, il devrait probablement faire un «retour» nu à la place. Cela serait interprété comme 'undef' dans un contexte scalaire et'() '(la liste vide) dans un contexte de liste. –