|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 05 Feb 2003 19:53:39 To : Andrey Sapozhnikov Subject : Re: died at (eval 1) line 1 -------------------------------------------------------------------------------- ce.ru> <b1rbok$22vr$1@ddt.demos.su> From: Artem Chuprina <ran@ice.ru> Здравствуй, Andrey Sapozhnikov. >> AS> my $fr = my_eval $id, 'sub { my $test; $test->method() }'; >> AS> $fr->(); AS> > AS> > Это ловит ошибки в eval, а мне надо в выполнении его результата. AS> тогда my_eval должен возвращать указатель на объект класса AS> MyEvalResult вместо настоящего кода возврата. Возможный вид объекта: AS> bless { RETCODE => $fr, ID => $id }, 'MyEvalResult'; AS> А для данного класса описать AUTOLOADER (прокси-метод вызывающий AS> методы класса $fr и преообразующий их в анонимные объекты класса AS> MyEvalResult наследуя ID), типа: AS> sub AUTOLOADER { AS> my $self = shift; AS> my ($method = $AUTOLOAD) =~ s/^.*:://; AS> my $ret = eval { $self->{RETCODE}->$method(@_) }; AS> die "ID: $self->{ID} $@" if $@; AS> bless {RETCODE => $ret, ID => $self->{ID}}, ref($self}; AS> } Понятно. Это тоже сводится к лишним eval'ам во время выполнения. Придется пойти по простому и циничному пути - вписывать в глобальные данные тот самый id при старте функции, благо функцию компилирует мой код, и еще один вызов метода туда не фатален. -- Artem Chuprina Communiware.net RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, ICQ: 13038757 --- ifmail v.2.15dev5 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/1445420401072.html, оценка из 5, голосов 10
|