% perl -wle 'sub foo { 1 for @_ } print 2 if defined foo()'
foo does nothing. There is no parameter. So undef is returned. So no wonder nothing is printed.
% perl -wle 'sub foo { 1 for @_ } print 2 if defined foo(3)'
The loop is run once. So a defined value is returned.
% perl -wle 'sub foo { 1 for @_ } print 2 if foo(3) == 0'
The value is defined but it's numerical value is zero
undef == 0
% perl -wle 'sub foo { 1 for @_ } print 2 if foo(3) eq ""'
and it's an empty string
undef eq ""
I
think 1 is different from 43 (or 42 or 2 or whatever other number you can come up besides 0) because it's usually used to represent "true".
s$$([},&%#}/&/]+}%&{})*;#$&&s&&$^X.($'^"%]=\&(|?*{%
+.+=%;.#_}\&"^"-+%*).}%:##%}={~=~:.")&e&&s""`$''`"e