summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/example.pl51
-rw-r--r--examples/next-in-loop/Error.pm-eval.pl40
-rw-r--r--examples/next-in-loop/Error.pm-next-label.pl38
-rw-r--r--examples/next-in-loop/Error.pm-next-out-of-catch.pl43
-rw-r--r--examples/next-in-loop/Error.pm-next.pl37
-rw-r--r--examples/next-in-loop/README3
-rw-r--r--examples/warndie.pl23
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 );