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

Amusingly enough, if you use Exception::Class and throw an error without a message, it has an overload that will stringify to undef, so "if ($@)" will in fact fail. The test against empty string will work though, even in this case. (And by the way, don't throw an Exception::Class error without a message.)

Replies are listed 'Best First'.
Re^3: Question on "Effective Perl Programming"
by kyle (Abbot) on Sep 06, 2007 at 04:01 UTC

    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;
      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.