| Exception-NoException documentation | Contained in the Exception-NoException distribution. |
Throw non-exception exceptions when you're using die() for flow
control and want $@ to appear to be false/empty.
use Exception::NoException;
eval {
die Exception::NoException->new;
};
die $@ if $@;
This is most useful when using File::Find::find or similar
callback-using functions. You can wrap your call in an eval and stop
execution by throwing a non-error. When you look at $@ to see if
there's a problem, you won't find any.
This method takes no arguments and returns a new object that acts like
an empty string "".
Overloads the built-in function ref and returns "".
::find use File::Find;
use Exception::NoException;
eval {
find( sub {
if ( $File::Find::name =~ /something/ ) {
# do something with the file
die Exception::NoException->new;
}
} );
};
die $@ if $@;
Josh Jore, <jjore at cpan.org>
blessed() will still return true.
Please report any bugs or feature requests to
bug-exception-noexception at rt.cpan.org, or through the web interface at
http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Exception-NoException.
I will be notified, and then you'll automatically be notified of progress on
your bug as I make changes.
You can find documentation for this module with the perldoc command.
perldoc Exception::NoException
You can also look for information at:
http://rt.cpan.org/NoAuth/Bugs.html?Dist=Exception-NoException
Yitzchak Scott-Thoennes came up with a problem where an exception
object used an eval block during the bool conversion from
overload. The following snippet caused him hours of grief and it
inspired me to come up with an object where that effect was actually
desired. It also happens to solve a common problem with loops that use
callbacks.
# Yitzchak's problem:
eval {
die SomeObject->new;
};
if ( $@ ) {
# now $@ is empty.
}
package SomeObject;
use overload bool => sub { eval { } };
sub new { bless [], shift }
To solve Yitzchak's problem, copy $@ ala my $e = $@ before
examining it.
Copyright 2011 Josh Jore, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| Exception-NoException documentation | Contained in the Exception-NoException distribution. |
package Exception::NoException; BEGIN { $Exception::NoException::VERSION = '0.07'; } # ABSTRACT: An exception object that's always false use strict; require Exception::NoException::_obj; sub new { my $obj; return bless \$obj, "$_[0]::_obj"; } 'The Adventures Of Kung-Fu Jesus and His Amazing Giant Robot'; __END__