#!/usr/bin/perl use v5.14; use Data::Dumper; BEGIN { package Err; require Exporter; our @ISA = qw(Exporter); our @EXPORT = qw(err); use overload q("") => sub { my $e = shift; "ERROR $e->[0]: $e->[1] \n".Carp::longmess()}; sub new { my $class = shift; bless $_[0], $class } sub err { __PACKAGE__->new([@_]) } } package main; BEGIN { Err->import } use Carp; sub f { g(); } sub g { die err(403, "Permission denied"); } f(); #### ERROR 403: Permission denied at ./test.pl line 28. main::g() called at ./test.pl line 24 main::f() called at ./test.pl line 31