ACME-Error
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
Revision history for Perl extension ACME::Error.
0.01 Fri Sep 20 11:06:02 2002
- original version; created by h2xs 1.2 with options
-AXn ACME::Error
Changes
MANIFEST
Makefile.PL
lib/ACME/Error.pm
lib/ACME/Error/SHOUT.pm
test.pl
Makefile.PL view on Meta::CPAN
use ExtUtils::MakeMaker;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
WriteMakefile(
'NAME' => 'ACME::Error',
'VERSION_FROM' => 'lib/ACME/Error.pm', # finds $VERSION
'PREREQ_PM' => {}, # e.g., Module::Name => 1.1
);
lib/ACME/Error.pm view on Meta::CPAN
package ACME::Error;
use strict;
use vars qw[$VERSION];
$VERSION = '0.03';
sub import {
my $class = shift;
if ( my $style = shift ) {
my $package = qq[ACME::Error::$style];
my $args = join q[', '], @_;
eval qq[use $package '$args'];
die $@ if $@;
my $nested = -1;
{ no strict 'refs';
$SIG{__WARN__} = sub {
local $SIG{__WARN__};
$nested++;
my $handler = $package . q[::warn_handler];
warn &{$handler}(@_) unless $nested;
warn @_ if $nested;
$nested--;
};
$SIG{__DIE__} = sub {
local $SIG{__DIE__};
$nested++;
my $handler = $package . q[::die_handler];
die &{$handler}(@_) unless $nested;
die @_ if $nested;
$nested--;
};
}
# $SIG{__WARN__} = sub {
# my $handler = $package . q[::warn_handler];
# {
# no strict 'refs';
# warn &{$handler} , "\n" if exists &{$handler};
# }
# };
# $SIG{__DIE__} = sub {
# my $handler = $package . q[::die_handler];
# {
# no strict 'refs';
# die &{$handler}, "\n" if exists &{$handler};
# }
# };
}
}
1;
__END__
=head1 NAME
ACME::Error - Never have boring errors again!
=head1 SYNOPSIS
use ACME::Error SHOUT;
warn "Warning"; # WARNING!
=head1 DESCRIPTION
C<ACME::Error> is a front end to Perl error styles. C<$SIG{__WARN__}> and C<$SIG{__DIE__}>
are intercepted. Backends are pluggable. Choose a backend by specifying it when you
C<use ACME::Error SomeStyle>;
=head2 Writing Backends
Writing backends is easy. See L<ACME::Error::SHOUT> for a simple example. Basically your
backend needs to be in the C<ACME::Error> namespace and defines just two subroutines, C<warn_handler>
and C<die_handler>. The arguments passed to your subroutine are the same as those passed to the signal
handlers, see L<perlvar> for more info on that. You are expected to C<return> what you want to be
C<warn>ed or C<die>d.
You can also run use an C<import> function. All arguments passed to C<ACME::Error> after
the style to use will be passed to the backend.
=head1 AUTHOR
Casey West <F<casey@geeknest.com>>
=head1 COPYRIGHT
Copyright (c) 2002 Casey R. West <casey@geeknest.com>. All
rights reserved. This program is free software; you can
redistribute it and/or modify it under the same terms as
Perl itself.
=head1 SEE ALSO
perl(1).
=cut
lib/ACME/Error/SHOUT.pm view on Meta::CPAN
package ACME::Error::SHOUT;
use strict;
no strict 'refs';
use vars qw[$VERSION];
$VERSION = '0.02';
*warn_handler = *die_handler = sub {
my @error = @_;
$error[$_] =~ s/.$/!/g for 0 .. $#error;
return map uc, @error;
};
1;
__END__
# Below is stub documentation for your module. You better edit it!
=head1 NAME
ACME::Error::SHOUT - ACME::Error Backend to Scream Errors
=head1 SYNOPSIS
use ACME::Error SHOUT;
=head1 DESCRIPTION
This backend converts your errors to screams.
=head1 AUTHOR
Casey West <F<casey@geeknest.com>>
=head1 COPYRIGHT
Copyright (c) 2002 Casey R. West <casey@geeknest.com>. All
rights reserved. This program is free software; you can
redistribute it and/or modify it under the same terms as
Perl itself.
=head1 SEE ALSO
perl(1).
=cut
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'
######################### We start with some black magic to print on failure.
# Change 1..1 below to 1..last_test_to_print .
# (It may become useful if the test is moved to ./t subdirectory.)
BEGIN { $| = 1; print "1..1\n"; }
END {print "not ok 1\n" unless $loaded;}
use ACME::Error;
$loaded = 1;
print "ok 1\n";
######################### End of black magic.
# Insert your test code below (better if it prints "ok 13"
# (correspondingly "not ok 13") depending on the success of chunk 13
# of the test code):
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.433 second using v1.00-cache-2.02-grep-82fe00e-cpan-503542c4f10 )