Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> eval 
:(
    Опции темы
gcc
Дата 29.7.2009, 04:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



для чего нужен eval в веб программировании, можно ли его не использовать?

в одном проекте на Catayst часто видел везде стоит eval, ну и модули сделаные с die

например 

Код

if (!$c->check_user_roles('moder')  && eval{$c->user->{user}->{id} == $id})


если написать без eval, то выдаст ошибку

я пишу так 

Код

if (!$c->check_user_roles('moder')  && $c->user_exists() && $c->user->{user}->{id} == $id})



eval это просто как стиль программирование, или его нужно использовать?


PM WWW ICQ Skype GTalk Jabber   Вверх
chorny
Дата 29.7.2009, 04:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 27.7.2009
Где: Молдавия

Репутация: нет
Всего: нет



В данном случае eval - это перехват исключения. Во многих языках используется try {} catch {}. В Perl такая конструкция возможна с помощью Error.pm или TryCatch.pm.
PM MAIL WWW   Вверх
gcc
Дата 29.7.2009, 04:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



то есть можно не использовать eval?

try {} v catch {} знаю, но тут не системное программирование, то есть я не пишу фремфорк, в веб программу, все модули  и все методы должны быть на месте, не может быть что их не будет

почему нельзя нормально пользователю выдать, например

Код

if (!$id) {
  $c->stash->{error} = 1;
  $c->detach();    
....
}

PM WWW ICQ Skype GTalk Jabber   Вверх
Ramirez
Дата 29.7.2009, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

Репутация: 4
Всего: 5



ну собственно основная идея - это выполнить кусок кода (например динамически сформированного) на этапе исполнения. т.е. интерпретация произойдет только тогда, когда исполнение дойдет до этой строки. А применение может быть различным.

использовать или не использовать зависит от ситуации. 
Есть реальная вероятность что в вызываемом модуле/функции произойдет ошибка? Эту ошибку можно/нужно игнорировать?

1. возможность перехватывать любые ошибки в процессе исполнения
Код

eval 'die()';
warn $!;
warn 'Life after die...';


2. на этапе исполнения подключать модули по мере необходимости. а не все сразу в момент интерпретации.
Код

eval 'use Something;' if ...;


3. позволяет динамически сформировать кусок кода и выполнить его:
Код

my $a = 'print';
my $b = '$c'
my $str = $a.$b;
my $c = 123;
eval $str;




Это сообщение отредактировал(а) Ramirez - 29.7.2009, 08:58
PM ICQ   Вверх
gcc
Дата 30.7.2009, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



ок, понтяно
PM WWW ICQ Skype GTalk Jabber   Вверх
Bulat
Дата 30.7.2009, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



больше всего мне eval нравится как обработчик исключительных ситуаций(ошибок). Кстати в языке Java блок try {} catch {} - просто необходимая часть кода.

Очень удобно, когда бизнес-логика проекта включает в себя ряд манипуляций на разном уровне, в коде, на уровне БД и т.д. 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0851 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.