Моя відповідь непопулярна, але я не думаю, що програмісти Perl повинні намагатися використовувати надзвичайно погане уявлення про те, що ми називаємо "винятками" в Perl. Це, по суті, значення повернення бічного каналу. Однак, як і раніше захоплені ідеєю винятків, навіть незважаючи на всю складність використання глобальної змінної для обходу стану, люди продовжують намагатися змусити її працювати.
Практично, однак, люди використовують dieдля сигналізації про несправність. Деякі скажуть, що ви можете dieза допомогою посилання та повернути об'єкти помилок, але вам це не потрібно die. У нас є об’єкти, тому слід використовувати всю силу об’єктів:
sub some_sub {
...
return Result->new( error => 1, description => ... ) if $something_went_wrong;
return Result->new( error => 0, ... );
}
my $result = some_sub( ... );
if( $result->is_error ) { ... };
Це не включає глобальні змінні, дії на відстань, масштабні головні болі або вимагає спеціальних спеціальних пропозицій. Ви створюєте крихітний клас Resultабо, як ви хочете його назвати, щоб обернути свої повернені значення, щоб у вас були структуровані дані замість окремих значень без ідентичності. Більше не цікаво, що означає повернена вартість. Це undefсправжнє значення або ознака відмови? Чи добре значення повернення, якщо воно визначене або якщо воно відповідає дійсності? Ваш предмет може розповісти вам ці речі. І, ви можете використовувати той самий об’єкт з die. Якщо ви вже використовуєте об'єкт dieі використовуєте його як повернене значення, дуже мало рекомендувати всі зайві речі, які потрібно зробити, щоб терпіти $@.
Більше про це я розповідаю в "Повернути об'єкти помилок замість викидів"
Однак я знаю, що ви не можете допомогти тому, що роблять інші люди, тому вам все одно доведеться робити вигляд, що Perl має винятки.