The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use Test;
BEGIN { plan tests => 8 }

use strict;
use Data::Dumper;
use Inline::Ruby qw(rb_eval);

my @exc = (
    ['divided by 0', 'ZeroDivisionError'],
    ["compile error\n(eval): parse error", 'SyntaxError'],
);

my $n = 0;
sub e {
    my $str = shift;
    eval { rb_eval($str) };
    return unless $@;
    my $x = $@;

    my $inspect = sprintf("#<%s: %s>", $x->type, $x->message);

    # Methods:
    ok($x->message, $exc[$n][0]);
    print Dumper $x->message;

    ok($x->type, $exc[$n][1]);
    print Dumper $x->type;

    ok($x->inspect, $inspect);
    print Dumper $x->inspect;

    # Stringification:
    ok("$x", "$inspect\n");
    print "Stringified: '$x'\n";

    # Backtrace (not tested)
    print Dumper $x->backtrace;

    $n++;
}

e "1/0";	# div by zero
e "1/";		# parse error