Как лучше всего приписывать ошибки в методе Perl вызывающей стороне

Учитывая метод, который может дать сбой с предупреждениями и / или ошибками, я хочу, чтобы метод ошибки отображался у вызывающей стороны. Например, следующий сценарий:

foo(0);         # line 1

sub foo {
    1 / shift;  # line 4
}

Выдает ошибку Недопустимое деление на ноль в строке 4 foo.pl , но я хочу Нелегальное деление на ноль в строке 1 foo.pl .Должно быть несколько способов, если я помещу метод в модуль или если я заключу тело метода в eval, но я не нашел такого простого способа:

sub foo {
    attributeErrorsToCaller; # do some magic
    1 / shift;
}

Есть ли такой способ?


EDIT: ] Ответ mirod подходит не к тому, что я искал:

Foo::foo(0);         # line 1

package Foo;
use diagnostics -traceonly;
BEGIN { disable diagnostics; }

sub foo {
    enable diagnostics;
    1 / shift;       # line 9
}

Без включить диагностику сообщение об ошибке Недопустимое деление на ноль в строке 9 foo.pl . С включить диагностику он по-прежнему слишком подробный, но это также может быть полезно:

Uncaught exception from user code:
    Illegal division by zero at foo.pl line 10.
 at foo.pl line 10
     Foo::foo(0) called at foo.pl line 2

Держу пари, я мог бы взломать диагностику , чтобы получить именно ту функцию, которую я хочу, но используя диагностику как необработанную модуль, вероятно, более рекомендуется.

5
задан Community 23 May 2017 в 12:26
поделиться