Jak wskazuje mobrule, zamiast niewielkich oszczędności można użyć następujących rozwiązań:
if (defined $name && $name ne '') {
}
Możesz zrezygnować ze zdefiniowanego czeku i dostać coś jeszcze krótszego, np .:
if ($name ne '') {
}
Ale w przypadku, gdy $name
nie jest zdefiniowane, chociaż przepływ logiczny będzie działał zgodnie z zamierzeniami, jeśli używasz warnings
(a powinieneś), otrzymasz następujące ostrzeżenie:
Użycie niezainicjowanej wartości w ciągu ne
Tak więc, jeśli istnieje szansa, która $name
może nie zostać zdefiniowana, naprawdę musisz przede wszystkim sprawdzić zdefiniowanie, aby uniknąć tego ostrzeżenia. Jak wskazuje Sinan Ünür, możesz użyć Scalar :: MoreUtils, aby uzyskać kod, który robi dokładnie to (sprawdza zdefiniowanie, a następnie sprawdza zerową długość) po wyjęciu z pudełka, za pomocą empty()
metody:
use Scalar::MoreUtils qw(empty);
if(not empty($name)) {
}
length undef
zwraca undef, zamiast ostrzeżenia i zwracania 0. W kontekście logicznym undef jest tak samo fałszywe jak 0, więc jeśli celujesz w wersję 5.12 lub nowszą, możesz po prostu napisaćif (length $name) { ... }