I would like to request a user-id for CPAN/PAUSE,
in order to upload the Try.pm module, as follows.
Name: Tony Olekshy
email: [EMAIL PROTECTED]
Preferred id: OLEKSHY
Perl Language Extensions
Try bdph Structured Exception Handling Mechanism OLEKSHY
This is an implementation in Perl 5 of the functionality described
in Perl 6 RFC 88 (http://tmtowtdi.perl.org/rfc/88.pod). The syntax
details aren't the same as those in RFC 88, but the overall syntax
and the functionality are the same.
Try.pm lets you do stuff like this:
use Try;
exception 'Exception::Foo';
exception 'Alarm';
exception 'Error::IO';
exception 'MyError', isa => 'Exception::Me::Error';
try sub {};
try sub {}, catch sub {};
try sub {}, catch "Alarm" => sub {};
try sub {}, catch "Error::IO" => sub {};
try sub {}, catch "Foo", "Bar" => sub {};
try sub {}, catch sub {} => sub {};
try sub {}, catch sub { $_[0] =~ /foo/ } => sub {};
try sub {}, catch sub { grep { $_->isa("Foo") } @_ } => sub {};
try sub {}, finally sub {};
try sub {},
catch "This" => sub {},
catch "That" => sub {},
finally sub {};
try %hooks, sub {}, ...;
throw Exception;
throw Exception "Can't foo.";
throw Exception "Can't foo.", data => $data, debug => $debug;
throw;
throw "Can't foo.";
throw "Can't foo.", data => $data, debug => $debug;
my $e = new Exception; $e->throw(...);
$e->{message}
$e->{data}
$e->{debug}
$e->{trace}
$e->show
$e->snapshot
%hooks = ( '""' => sub { stringify $_[0] },
'snapshot' => sub { return caller() info },
'string_wrap' => sub { new Exception::Foo @_ },
);
In addition to RFC 88, this module has been extensively discussed at
[EMAIL PROTECTED], and was debated on the perl-friends
mailing list in March of 2000. The current version is closely
related to a version that has been in use at Avra Softare Lab Inc
for the last two years. It provides functionality similar to
Error.pm, but with a simpler and more extensible interface, with
the addition of the concept of an exception unwind stack, and with
the benefit of all the great contributions on perl6-language-errors.
The current implementation includes over 40 regression tests. I'm
just finishing off a few more mechanism hooks, and I have to extract
the module documentation out of RFC 88, but I'm working on that now.
Yours, &c, Tony Olekshy