sub include { my $file = shift; unless (my $return = do $file) { my (undef, $callerfile, $callerline) = caller; my $from = "included from $callerfile line $callerline"; die "Couldn't parse $file, $from:\n$@" if $@; die "Couldn't do $file, $from: $!" unless defined $return; die "Couldn't run $file, $from" unless $return; } } #### Couldn't parse A.pm, included from test.pl line 8: Couldn't parse B.pm, included from A.pm line 7: Couldn't parse X.pm, included from B.pm line 7: Blammo at X.pm line 6.