Я хочу, чтобы мой класс взорвался, если метод BUILD
не удался.Однако, если я использую croak
для обработки ошибки, об ошибке сообщается из Class/MOP/Method.pm
, а не из кода вызывающей стороны.(То есть вызывающий объект, который создает экземпляр объекта.) IOW, croak
недостаточно лает вверх по дереву вызовов.
Вот:
package Test;
use Moose;
use Carp 'croak';
sub BUILD {
croak 'u r dum';
}
1;
Создание экземпляра Test
приводит к:
u r dum at /home/friedo/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/Class/MOP/Method.pm line 125
Carp.pm
должен обратить внимание на переменную пакета с именем @CARP_NOT
, чтобы узнать, каких пакетов следует избегать, но, похоже, он обращает внимание только на один элемент в списке.Например, если я добавлю это к своему Test.pm
:
our @CARP_NOT = ( 'Class::MOP::Method' );
, тогда результат будет:
u r dum at /home/friedo/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/Moose/Object.pm line 59
Так что я должен просто добавить , что ка также массив, верно?
our @CARP_NOT = ( 'Class::MOP::Method', 'Moose::Object' );
Тогда результат по-прежнему:
u r dum at /home/friedo/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/Moose/Object.pm line 59
Moose::Object
, кажется, не затронут.
Я бился головойэто на какое-то время, и я не могу понять, в чем дело.
Спасибо.