my $error; my @got; { local $@; @got = eval { $self->call(); }; if ($@) { if (ref($@) && $@ == $cut) { push @return, @$cut; next; } else { $error = $@; } } } die $error if $error; push @return, @got;