Моя відповідь непопулярна, але я не думаю, що програмісти 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 має винятки.