in reply to Re^2: Question on "Effective Perl Programming"
in thread Question on "Effective Perl Programming"

Maybe I'm not reading your description correctly, or maybe our versions of Exception::Class differ, but I don't see the behavior you're describing. Quite the opposite, in fact. The boolean test sees the exception, but the test against '' can't see it (because it stringifies to '').

use Exception::Class ( 'MyException' => { description => '' } ); eval { MyException->throw( message => '' ); }; if ($@) { print "I see you, exception class (boolean)!\n"; } else { print "Nothing to see here (boolean).\n"; } if ( $@ ne '' ) { print "I see you, exception class (ne '')!\n"; } else { print "Nothing to see here (ne '').\n"; } __END__ I see you, exception class (boolean)! Nothing to see here (ne '').

My version is 1.2, and I see this in it:

use overload # an exception is always true bool => sub { 1 }, '""' => 'as_string', fallback => 1;

Replies are listed 'Best First'.
Re^4: Question on "Effective Perl Programming"
by perrin (Chancellor) on Sep 06, 2007 at 05:59 UTC
    Don't supply a message:
    MyException->throw()
    This seemed like a reasonable thing to do at the time, since I was only looking at the class name, not the message.

      In that case, I get exactly the same result as with the '' message.

        According to the changelog, this was fixed in version 1.01.