Учитывая метод, который может дать сбой с предупреждениями и / или ошибками, я хочу, чтобы метод ошибки отображался у вызывающей стороны. Например, следующий сценарий:
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
Держу пари, я мог бы взломать диагностику , чтобы получить именно ту функцию, которую я хочу, но используя диагностику как необработанную модуль, вероятно, более рекомендуется.