use strict; use warnings; package SAME; use Carp; use Data::Dumper; sub out {warn @_,"\n" } out "Perl-Version $] $^OS"; out '====== default $Carp::Verbose =', Dumper $Carp::Verbose; my $err_msg = "Fehlermeldung"; sub throw0 { my ($type) = @_; out "=== Testing $type"; eval { goto $type } or die "Testcase '$type' not implemented"; croak: croak $err_msg; die: die $err_msg; confess: confess $err_msg; } sub throw1 { throw0(@_) } sub throw2 { throw1(@_) } my $PACKAGE="OTHER"; for my $verbose ( 0,1 ) { if (defined $verbose) { $Carp::Verbose = $verbose; out "====== Setting Verbose to $verbose"; } no warnings 'redefine'; # --- types of dieing for my $type (qw/die croak confess/) { eval <<"__CODE__" or out $@; package $PACKAGE; use Data::Dumper; sub client0 { SAME::throw2(\@_); }; sub client1 { client0(\@_); }; client1("$type"); __CODE__ } }