Неправильно, проверять упал ли eval по $@ нельзя. Она иногда может отсутствовать даже если код упал. Правильная проверка по возвращаемому значению. Только по тому, которое всегда ганартированно есть когда евал не вылетел. my $ok = eval { code...; 1 }; unless ($ok) { say « eval died: $@« ; ... }