Note: Please read carefully; it's odd (unless I have tomatoes on my eyes)
I was changing a program of mine when it suddenly stopped to work as intended, and I failed to find the reason. Eventually I found it; please consider this Perl debugger session extract (Perl 5.18.2):
DB<8> x $result
0 undef
DB<9> c
main::receive_message(./syslogd.pl:1555):
1555: $result = 1;
DB<9> x $result
0 ARRAY(0x375cdb0)
0 IO::Socket::INET=GLOB(0x2f8aa20)
-> *Symbol::GEN3
FileHandle({*Symbol::GEN3}) => fileno(6)
1 SocketAddress=ARRAY(0x375d188)
0 'v04:36766'
1 'v04'
2 36766
3 ''
2 '<22>May 23 10:22:07 v04 postfix/cleanup[22002]: F26AB68046: message-id=<1653294126.782e1e75c78c74d3@v04>'
DB<10> n
main::receive_message(./syslogd.pl:1561):
1561: $lc->verbose(3, "$me: returning " . Class::_format_undef($result));
DB<10> x $result
0 undef
So in line 1555 $result will be set to 1 (inside an if-else block).
Before $result is an ARRAY ref (as seeen).
However after the line was executed (by n), the value of $result is undef, not 1 (right after the if-else block, thus a few lines later).
As the result will be returned, the caller sees the wrong result value and fails.
Unfortunately either me or Perl is heavily confused. Who can explain?
The tomatoes fell of my eyes! (I'm providing this answer instead of deleting the question just in case someone will ever see a similar problem)
The code basically was:
So the error was: "a
mytoo much" (in theif).