in reply to Checking Variable for Not Null

Hello dirtdog,

First, you have the logic back-to-front; you want:

next if !$ex_date; next if !defined($ex_date);

or

next unless ex_date; next unless defined($ex_date);

Second, the two statements are not equivalent. The first will skip to the next record if $ex_date has the value of 0 (zero), "" (the null string), or undef. See perlsyn#Truth-and-Falsehood. The second statement will skip only if $ex_date is undef.

Which form to use depends on how you define “null.” If by null you mean false, then use the first form; but if you mean undefined, then the second form is the one you want. Without more information, it’s difficult to guess which meaning of “null” best suits your needs; but the second interpretation (null means undef) is usually the safer option.

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^2: Checking Variable for Not Null
by dirtdog (Monk) on May 27, 2015 at 15:09 UTC

    Hi, what i mean by null in this case is i'm checking a date position in a file (for example position 140-148). If there is no date passed:

    $ex_date=substr($_,140,8);$ex_date =~ s/\s+$//;

    then i would want to skip to the next record.

      In that case, your “null” corresponds to the empty string, so you can test for true or false (because the empty string is “false” in Perl):

      next if !$ex_date;

      But it’s better (because clearer) to make the test explicit:

      next if length $ex_date == 0; # or next if $ex_date eq "";

      Hope that helps,

      Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

        Yes, thank you. that's a big help.