The first one here may reveal something: % perl -MO=Deparse -cwe 'sub foo { 23 }; foo' Use of uninitialized value in string eq at /usr/local/lib/perl5/5.6.0/OpenBSD.i386-openbsd/B/Deparse.pm line 2253. sub foo { 23; } foo ; -e syntax OK And I'll bet that this second one does: % perl -MO=Deparse -cwe 'sub foo { foo($x--) if $x }' Exiting subroutine via next at /usr/local/lib/perl5/5.6.0/OpenBSD.i386-openbsd/B/Deparse.pm line 257. Exiting subroutine via next at /usr/local/lib/perl5/5.6.0/OpenBSD.i386-openbsd/B/Deparse.pm line 257. Can't call method "sibling" on an undefined value at /usr/local/lib/perl5/5.6.0/OpenBSD.i386-openbsd/B/Deparse.pm line 257. CHECK failed--call queue aborted. That's a pretty small testcase, so it should help. --tom