|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrey Sapozhnikov 2:5020/400 05 Feb 2003 19:49:06 To : Artem Chuprina Subject : Re: died at (eval 1) line 1 -------------------------------------------------------------------------------- ce.ru> From: Andrey Sapozhnikov <sapa@icb.chel.su> Artem Chuprina wrote: > AS> my $fr = my_eval $id, 'sub { my $test; $test->method() }'; > AS> $fr->(); > > Это ловит ошибки в eval, а мне надо в выполнении его результата. тогда my_eval должен возвращать указатель на объект класса MyEvalResult вместо настоящего кода возврата. Возможный вид объекта: bless { RETCODE => $fr, ID => $id }, 'MyEvalResult'; А для данного класса описать AUTOLOADER (прокси-метод вызывающий методы класса $fr и преообразующий их в анонимные объекты класса MyEvalResult наследуя ID), типа: sub AUTOLOADER { my $self = shift; my ($method = $AUTOLOAD) =~ s/^.*:://; my $ret = eval { $self->{RETCODE}->$method(@_) }; die "ID: $self->{ID} $@" if $@; bless {RETCODE => $ret, ID => $self->{ID}}, ref($self}; } ну и возможно перегрузить часть операций для объектов данного типа, например: use overload '""' => sub { '' . $self->{RETCODE} }, '0+' => sub { 0 + $self->{RETCODE} } и т.д. на случай если данный кусок кода может возвращать не только reference. Андрей --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/6577c7c09895.html, оценка из 5, голосов 10
|