http://www.perlmonks.org?node_id=554371


in reply to Re^2: Carp::Clan
in thread Carp::Clan

croak will say the error was in process_something's caller if process_something was called from another package. For example,
use strict; use warnings; package Module; use Carp qw( croak ); my %handler = ( foo => sub { ref $_[0] eq 'ARRAY' or croak "foo key takes a hashref +"; 1 }, bar => sub { $_[0] =~ /wibble$/ or croak "bar key must end with 'wi +bble'"; 1 }, ); sub process_something { my %arg = @_; my @results; while( my ( $elem, $param ) = each %arg ) { push @results, $handler{ $elem }( $param ); } } package main; Module::process_something( foo => 'a' ); # <-- line 27.

outputs

foo key takes a hashref at 554371.pl line 27