in reply to Jumping trought lot of subroutines

By wrapping the potentially failing code up in an eval you can die and report errors back that way. Consider:

use strict; use warnings; my (%Numbers,$i); my @Values = qw/first second third/; $Numbers{$_} = ++$i for @Values; for my $cur (@Values) { next if eval { my $value = &get_number ($cur); $value .= &get_ordinal ($cur); # more, more.. print "$cur is $value\n"; }; print $@; } sub get_number { my $value = shift; if ($value eq "second") { die "bad value"; } return $Numbers{$value}; } sub get_ordinal { return substr(shift, -2); }

Prints:

first is 1st bad value at noname.pl line 25. third is 3rd

DWIM is Perl's answer to Gödel