Mam następujący (wyidealizowany z błędem) Krótki skrypt w Perlu:Dlaczego mój skrót nie jest niepoprawny?
my %metadata = undef;
if (defined %metadata)
{
print "defined";
}
jakiegoś powodu wyjście programu jest zawsze „zdefiniowany”. Ustawienie wartości mieszania jako "niezdefiniowanej" w jakiś sposób sprawia, że jest ona zdefiniowana. Czy jest zdefiniowany jako "niezdefiniowany"?
EDIT:
to wyidealizowany przypadek, starając się odtworzyć problem. Co ja właściwie robi to bardziej jak:
my %metadata = my_sub_function();
if (defined %metadata)
{
print "defined";
}
Gdzie wyjście my_sub_function może być undef() lub zaludnionych hash, a ja tylko chce wydrukować „zdefiniowane” w ostatnim z tych przypadków.
EDIT 2:
Przypadkowo odkryłem, że
if (scalar(keys %metadata)
zachowuje się poprawnie(), ale jeszcze nie na undef.
robi '' my_sub_function' zrobić zwrot undef' do I podać błąd lub brak danych? Jeśli tak, to powinien raczej wykonać "powrót" zamiast "go". Będzie to interpretowane jako 'undef' w kontekście skalarnym i'() '(pusta lista) w kontekście listowym. –