Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Carp::croak vs eval


Автор: KSURi 30.12.2008, 19:51
Есть примерно такой код:
Код

sub foo {
  # ...
  eval {
    $mime_lite_obj->send(%params)
  };
  # ..
}

этот код находится в модуле, который использует один из скриптов. Так вот несмотря на eval, этот скрипт иногда вылетает с ошибкой SMTP
Код

Net::CMD (Net::SMTP) DATASEND command failed.
Last server message was: Go ahead y6sm32554954mug.2
This probably represents a problem with newline encoding  at .../MIME/Lite.pm line 2322

Почему это происходит? Меня волнует не почему SMTP ругается, а почему скрипт не игнорирует croak.

PS: оборачивал вызов метода foo в eval, менял eval {} на eval qq{} - ничего не помогло.

Автор: gcc 31.12.2008, 12:43
у меня eval не всегда срабатывает, я хотел скрипт взять или поддпрограмму в eval но не сработало

Carp ошибки пишет? может быть eval реагирует на "маленькие" ошибки которые идут в лог веб сервера

Автор: ginnie 31.12.2008, 14:45
KSURi, проблема скорее всего не в croak(), т.к. фрагмент

Код

use Carp;

eval {
   croak('test 1'); 
};

warn 'test 2';


работает правильно.

Автор: KSURi 31.12.2008, 14:48
Проблема была решена "бубнами": в скрипте использовался модуль Win32::Daemon::Simple. После его удаления вылетания прекратились.
Однако, в чем была суть, я так и не понял.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)