sub _lm { longmess() }
sub l {
my ($x) = @_;
die( { data => 1, stack => _lm() } ) if $x =~ /\D/;
return $x;
}
или
sub l {
my ($x) = @_;
local $Carp::CarpLevel = $Carp::CarpLevel - 1;
die( { data => 1, stack => longmess() } ) if $x =~ /\D/;
return $x;
}
или
sub mycroak { die( { @_, stack => longmess() } ); }
sub l {
my ($x) = @_;
mycroak( data => 1 ) if $x =~ /\D/;
return $x;
}
(croak
заменено на die
, потому что вы не воспользовались преимуществами croak
функциональность.)