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

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 '')

Replies are listed 'Best First'.
Re^4: if not defined
by bart (Canon) on Mar 23, 2007 at 19:47 UTC
    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.
Re^4: if not defined
by pKai (Priest) on Mar 23, 2007 at 20:51 UTC
    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'; }