in reply to if not defined

if (!defined $pname) { do something with $pname } else { do something in the way of a polite error message }

----
I Go Back to Sleep, Now.

OGB

Replies are listed 'Best First'.
Re^2: if not defined
by bart (Canon) on Mar 23, 2007 at 18:44 UTC
    No need to switch to !, not is legal Perl.

      But there is a precedence problem
      if (not defined($pname) && $pname ne '')
      means
      if (not (defined($pname) && ($pname ne '')))
      while
      if (!defined($pname) && $pname ne '')
      means
      if ((!defined($pname)) && ($pname ne ''))

      The OP wants
      if (!defined($pname) && $pname ne '')
      or
      if ((not defined($pname)) && $pname ne '')

        No need to use &&, as there is and. :)

        Anyway, you've pinpointed the problem, it's a precedence problem, and

        if(not foo and not bar) { ...
        will do the right thing, as desired.
        The OP wants

        if (!defined($pname) && $pname ne '')

        really?

        For one, we have

        >perl -w -e "print 1 if !defined($pname) && $pname ne ''" Use of uninitialized value in string ne at -e line 1.
        While

        not defined($pname) && $pname ne ''

        if, and only if

        ! defined($pname) || $pname eq ''

        Which looks perfectly reasonable in a test like

        if (!defined($pname) || $pname eq '') { croak 'We want something real in $pname. Not undef or the empty st +ring'; }