Допустим, у меня есть модуль Bar, который является оболочкой подкласса для модуля Foo.Я хочу, чтобы вызовы методов Бар точно имитировали методы Фу - вплоть до фатальных ошибок.Пока все достаточно просто;Я просто вызываю метод SUPER.
sub stuff {
# Do stuff here
SUPER::stuff(@_);
# Do more stuff here
}
Но, скажем, я хочу перехватывать, регистрировать и перебрасывать любые фатальные ошибки, которые выдает SUPER::stuff()
.Первые два шага просты:
sub stuff {
# Do stuff here
eval {
SUPER::stuff(@_);
};
$@ and log("Naughty, naughty: $@");
# Do more stuff here
}
... но я не знаю, как сделать последнюю часть.Как мне повторно выдать ошибку таким образом, что вызывающий абонент не сможет различить вызов на Foo->stuff()
и вызов на Bar->stuff()
?Могу ли я просто вставить die $@
после оператора log и ожидать, что он будет делать то, что я хочу, или здесь есть нюансы, которые могут вызвать у меня проблемы?