Właśnie użyłem tego kodu, aby sprawdzić, czy ciąg jest pusty:
if ($str == "")
{
// ...
}
To samo dotyczy operatora nie równa się ...
if ($str != "")
{
// ...
}
Wydaje się, że to działa (tak mi się wydaje), ale nie jestem pewien, czy jest to właściwy sposób lub czy są jakieś nieprzewidziane wady. Coś po prostu nie pasuje do tego.
perl
string
comparison
Nick Bolton
źródło
źródło
Ze względu na sposób, w jaki łańcuchy są przechowywane w Perlu, optymalizowane jest pobieranie długości łańcucha.
if (length $str)
to dobry sposób na sprawdzenie, czy łańcuch nie jest pusty.Jeśli jesteś w sytuacji, przed którą jeszcze się nie broniłeś
undef
, to nie ostrzeże Cię „niepuste”if (defined $str and length $str)
.źródło
if (length($str))
jest to fajne podejście i nie zawiedzie, jeśli zmienna nie jest zdefiniowana.Prawdopodobnie chcesz użyć „eq” zamiast „==”. Jeśli martwisz się niektórymi skrajnymi przypadkami, możesz również sprawdzić, czy nie ma niezdefiniowanych:
if (not defined $str) { # this variable is undefined }
źródło
Jak już wspomniało kilka osób,
eq
jest to właściwy operator.Jeśli jesteś
use warnings;
w swoim skrypcie, otrzymasz ostrzeżenia o tym (i wiele innych przydatnych rzeczy); Ja również polecamuse strict;
.źródło
use strict
ale aktualizuję stary kod, więc kiedy to dodam, otrzymuję setki błędów. Pewnie kiedyś je naprawię.Sama koncepcja „właściwego” sposobu robienia czegokolwiek, oprócz używania CPAN, nie istnieje w Perlu.
W każdym razie są to operatory numeryczne, których powinieneś używać
if($foo eq "")
lub
if(length($foo) == 0)
źródło
if ($foo == "")
, na przykład, jest ostatecznie źle chyba rzeczywiście znaczy być testowanie na czy$foo
, oceniana w kontekście numerycznym, ma wartość 0 (w takim przypadku byłoby jeszcze lepiej napisany jakoif ($foo == 0)
, jako że jaśniej wyraża swoje zamiar).Aby sprawdzić, czy nie ma pustego ciągu, możesz również zrobić coś w następujący sposób
if (!defined $val || $val eq '') { # empty }
źródło