in reply to Re: if not defined
in thread if not defined

No need to switch to !, not is legal Perl.

Replies are listed 'Best First'.
Re^3: if not defined
by ikegami (Patriarch) on Mar 23, 2007 at 19:41 UTC

    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'; }