use Carp; sub sum { croak 'Usage: sum($first, $second)' unless @_ == 2; my ($first, $second) = @_; return $first + $second; } sub call { my ($sub, @args) = @_; croak 'Usage: call(\&sub, @args)' unless ref $sub and ref $sub eq 'CODE'; return $sub->(@args); } $\ = "\n"; print call(\&sum, 1, 3); # Error happens in call() [line 12], because that's where sum() is called! print call(\&sum, 5);