return $r;
}
+sub _clean_msg {
+ my ($msg) = @_;
+ $msg =~ s/(?:\s+called)?\s+at\s+.*$//s;
+ return $msg;
+}
+
=head2 C<flatten $proto, @args>
Flattens the array C<@args> according to the prototype C<$proto>. When C<@args> is what C<@_> is after calling a subroutine with prototype C<$proto>, C<flatten> returns the list of what C<@_> would have been if there were no prototype.
} elsif ($p =~ /[\@\%]/) {
push @args, @_;
last;
- } elsif ($p eq '_') {
- shift; # without prototype, this argument wouldn't have been passed
} else {
+ croak 'Not enough arguments to match this prototype' unless @_;
push @args, shift;
}
}
$call = 'sub ' . $call if $opts{sub};
if ($opts{compile}) {
$call = eval $call;
- croak $@ if $@;
+ croak _clean_msg $@ if $@;
}
return $call;
}
sub recall {
my $wrap = eval { wrap shift };
- croak $@ if $@;
+ croak _clean_msg $@ if $@;
return $wrap->(@_);
}