/ / Czy istnieje podprogram Perl dla istniejącego i zdefiniowanego? - perl, operatory, podprogram

Czy istnieje podprogram Perla dla istnienia i zdefiniowania? - perl, operatory, podprogram

Używam istnieje i zdefiniowałem w instrukcji if cały czas

if (exists($a->{b}) and defined($a->{b})

czy istnieje podprogram, który wykonuje oba te zadania jednocześnie?

AKTUALIZACJA:
Wydaje się, że nie podałem bardzo dobrego przykładowego kodu. Aby uzyskać lepsze pytanie i dopasować odpowiedź, sprawdź sprawdzanie-istnienia-klucza-skrótu-tworzy-klucz.

Odpowiedzi:

2 dla odpowiedzi № 1

defined(...) może być prawdziwe tylko wtedy, gdy exists(...) jest prawdą, więc odpowiedź na twoje pytanie brzmi, że wywoływany jest podprogram defined.


6 dla odpowiedzi nr 2

To tak samo jak

if (defined($a->{b}))

Jeśli chodzi o odpowiedź w komentarzach, defined nie tworzy instancji kluczy.

>perl -E"if (exists($a->{b}) and defined($a->{b})) { }  say 0+keys(%$a);"
0

>perl -E"if (defined($a->{b})) { }  say 0+keys(%$a);"
0

->, z drugiej strony, autowirusa normalnie.

>perl -E"if (defined($a->{b})) { }  say $a || 0;"
HASH(0x3fbd8c)

Ale tak jest w przypadku exists także.

>perl -E"if (exists($a->{b}) and defined($a->{b})) { }  say $a || 0;"
HASH(0x81bd7c)

Jeśli starasz się uniknąć autoweryfikacji, użyjesz

>perl -E"if ($a && defined($a->{b})) { }  say $a || 0;"
0

lub

>perl -E"no autovivification; if (defined($a->{b})) { }  say $a || 0;"
0

1 dla odpowiedzi nr 3
  • istnieje () sprawdza, czy klucz istnieje (nawet jeśli wartość undef)
  • zdefiniowane () sprawdza, czy istnieje zdefiniowana wartość

jeśli chcesz tylko sprawdzić, czy klucz istnieje (nawet jeśli undef), po prostu użyj istnieje ()

oto pytania pokrewne, które wyjaśniają to całkiem ładnie: Jaka jest różnica między istnieje a zdefiniowana?