diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/example.pl | 51 | ||||
-rw-r--r-- | examples/next-in-loop/Error.pm-eval.pl | 40 | ||||
-rw-r--r-- | examples/next-in-loop/Error.pm-next-label.pl | 38 | ||||
-rw-r--r-- | examples/next-in-loop/Error.pm-next-out-of-catch.pl | 43 | ||||
-rw-r--r-- | examples/next-in-loop/Error.pm-next.pl | 37 | ||||
-rw-r--r-- | examples/next-in-loop/README | 3 | ||||
-rw-r--r-- | examples/warndie.pl | 23 |
7 files changed, 235 insertions, 0 deletions
diff --git a/examples/example.pl b/examples/example.pl new file mode 100644 index 0000000..59da597 --- /dev/null +++ b/examples/example.pl @@ -0,0 +1,51 @@ + +use lib '.'; +use Error qw(:try); + +@Error::Bad::ISA = qw(Error); + +$Error::Debug = 1; # turn on verbose stacktrace + +sub abc { + try { + try { + throw Error::Simple("a simple error"); + } + catch Error::Simple with { + my $err = shift; + throw Error::Bad(-text => "some text"); + } + except { + return { + Error::Simple => sub { warn "simple" } + } + } + otherwise { + 1; + } finally { + warn "finally\n"; + }; + } + catch Error::Bad with { + 1; + }; +} + +sub def { + unlink("not such file") or + record Error::Simple("unlink: $!", $!) and return; + 1; +} + +abc(); + + +$x = prior Error; + +print "--\n",$x->stacktrace; + +unless(defined def()) { + $x = prior Error 'main'; + print "--\n",0+$x,"\n",$x; +} + diff --git a/examples/next-in-loop/Error.pm-eval.pl b/examples/next-in-loop/Error.pm-eval.pl new file mode 100644 index 0000000..87c67f7 --- /dev/null +++ b/examples/next-in-loop/Error.pm-eval.pl @@ -0,0 +1,40 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Error qw(:try); +use Scalar::Util qw(blessed); + +use IO::Handle; + +package MyError; + +use base 'Error'; + +package SecondError; + +use base 'Error'; + +package main; + +autoflush STDOUT 1; + +SHLOMIF_FOREACH: +foreach my $i (1 .. 100) +{ + eval + { + if ($i % 10 == 0) + { + throw MyError; + } + }; + my $E = $@; + if (blessed($E) && $E->isa('MyError')) + { + next SHLOMIF_FOREACH; + } + print "$i\n"; +} + diff --git a/examples/next-in-loop/Error.pm-next-label.pl b/examples/next-in-loop/Error.pm-next-label.pl new file mode 100644 index 0000000..1badf74 --- /dev/null +++ b/examples/next-in-loop/Error.pm-next-label.pl @@ -0,0 +1,38 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Error qw(:try); + +use IO::Handle; + +package MyError; + +use base 'Error'; + +package SecondError; + +use base 'Error'; + +package main; + +autoflush STDOUT 1; + +SHLOMIF_FOREACH: +foreach my $i (1 .. 100) +{ + try + { + if ($i % 10 == 0) + { + throw MyError; + } + } + catch MyError with + { + my $E = shift; + next SHLOMIF_FOREACH; + }; + print "$i\n"; +} diff --git a/examples/next-in-loop/Error.pm-next-out-of-catch.pl b/examples/next-in-loop/Error.pm-next-out-of-catch.pl new file mode 100644 index 0000000..019fe38 --- /dev/null +++ b/examples/next-in-loop/Error.pm-next-out-of-catch.pl @@ -0,0 +1,43 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Error qw(:try); + +use IO::Handle; + +package MyError; + +use base 'Error'; + +package SecondError; + +use base 'Error'; + +package main; + +autoflush STDOUT 1; + +SHLOMIF_FOREACH: +foreach my $i (1 .. 100) +{ + my $caught = 0; + try + { + if ($i % 10 == 0) + { + throw MyError; + } + } + catch MyError with + { + my $E = shift; + $caught = 1; + }; + if ($caught) + { + next SHLOMIF_FOREACH; + } + print "$i\n"; +} diff --git a/examples/next-in-loop/Error.pm-next.pl b/examples/next-in-loop/Error.pm-next.pl new file mode 100644 index 0000000..4a0bab3 --- /dev/null +++ b/examples/next-in-loop/Error.pm-next.pl @@ -0,0 +1,37 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Error qw(:try); + +use IO::Handle; + +package MyError; + +use base 'Error'; + +package SecondError; + +use base 'Error'; + +package main; + +autoflush STDOUT 1; + +foreach my $i (1 .. 100) +{ + try + { + if ($i % 10 == 0) + { + throw MyError; + } + } + catch MyError with + { + my $E = shift; + next; + }; + print "$i\n"; +} diff --git a/examples/next-in-loop/README b/examples/next-in-loop/README new file mode 100644 index 0000000..f13c21f --- /dev/null +++ b/examples/next-in-loop/README @@ -0,0 +1,3 @@ +This is a case study for various ways to implement a "next" command +inside one of the Error.pm clauses, which itself will be inside an +inner loop inside Error.pm. diff --git a/examples/warndie.pl b/examples/warndie.pl new file mode 100644 index 0000000..23e2e9e --- /dev/null +++ b/examples/warndie.pl @@ -0,0 +1,23 @@ +#!/usr/bin/perl -w + +require Error; +if( $ARGV[0] ) { + import Error qw( :warndie ); + print "Imported the :warndie tag.\n"; + print "\n"; +} +else { + print "Running example without the :warndie tag.\n"; + print "Try also passing a true value as \$ARGV[0] to import this tag\n"; + print "\n"; +} + +sub inner { + shift->foo(); +} + +sub outer { + inner( @_ ); +} + +outer( undef ); |