Список форумов Шадринский форум -> Программирование -> PHP, PERL, HTML, CSS etc -> Функция eval
Начать новую тему   Ответить на тему   вывод темы на печать

Функция eval

Автор
Сообщение
Xak
Запомнил кнопки...


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 218
Откуда: Тюмень

Статус: Offline
СообщениеДобавлено: 2007.01.12 00:09.06
Ответить с цитатой
Вот такой вот вопросик: Если в тексте программы я определил переменную, скажем $text, а ниже я вызываю функцию eval с каким либо кодом внутри, то будет ли доступна мне переменная $text внутри eval или она будет считаться неопределенной?
_________________
ТюмГНГУ
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Konst
Писатель


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 682


Статус: Offline
СообщениеДобавлено: 2007.01.12 00:55.47
Ответить с цитатой
Будет доступна.
Посмотреть профиль Отправить личное сообщение
Xak
Запомнил кнопки...


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 218
Откуда: Тюмень

Статус: Offline
СообщениеДобавлено: 2007.01.12 09:24.58
Ответить с цитатой
Konst писал(а):
Будет доступна.

Ты берешь в рассмотрение язык php или без разницы какой язык ?
_________________
ТюмГНГУ
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
VolF
подонок


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 3043
Откуда: Rammstein, GmbH

Статус: Offline
СообщениеДобавлено: 2007.01.12 09:27.30
Ответить с цитатой
Xak писал(а):
Ты берешь в рассмотрение язык php или без разницы какой язык ?

думаю в HTML и CSS эта функция работать не будет Smile
з.е. смотрим название ветки
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2007.01.12 09:31.51
Ответить с цитатой
eval работает примерно как include
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Xak
Запомнил кнопки...


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 218
Откуда: Тюмень

Статус: Offline
СообщениеДобавлено: 2007.01.12 10:19.03
Ответить с цитатой
Просто я выполняю такой код:

eval("use DBI;");
eval("my $pglink = DBI -> connect(.....");

Так вот етот код выдает ошибку, а именно вторая строка. Мол вы не подключили модуль DBI, хотя в первой строке я его подключаю

Не работает и етот код:

use DBI;
eval("my $pglink = DBI -> connect(.....");

Что делать ума не приложу Surprised
_________________
ТюмГНГУ
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Петрович
Ведущий банщик


Пол: Пол:Муж.
Зарегистрирован: 31.08.2005
Сообщения: 1392
Откуда: Сибирь...

Статус: Offline
СообщениеДобавлено: 2007.01.12 10:23.50
Ответить с цитатой
А вообще без eval работает?

З.Ы. Вопрос, как оказалось, вообще из другой оперы, потому как никакие переменных вне евала ты не определяешь в этом примере.
Посмотреть профиль Отправить личное сообщение ICQ Number
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2007.01.12 10:34.21
Ответить с цитатой
Xak писал(а):
Не работает и етот код:

в этом случае что пишет?

ps: вообще странное использование eval, может что-то с логикой не то?
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Xak
Запомнил кнопки...


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 218
Откуда: Тюмень

Статус: Offline
СообщениеДобавлено: 2007.01.12 10:38.15
Ответить с цитатой
andy ice писал(а):
Xak писал(а):
Не работает и етот код:

в этом случае что пишет?

ps: вообще странное использование eval, может что-то с логикой не то?

Возможно я привел не удачный пример. В том и другом случаи пишет что переменная неизвестна. На самом деле у меня получается так, что в первом евале определяется переменная, а во втором евале происходит манипуляция с ней (вернее так должно быть, но вылетает ошибка).
_________________
ТюмГНГУ
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Konst
Писатель


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 682


Статус: Offline
СообщениеДобавлено: 2007.01.12 11:00.05
Ответить с цитатой
Конкретно по твоему вопросу:
Xak писал(а):
Если в тексте программы я определил переменную, скажем $text, а ниже я вызываю функцию eval с каким либо кодом внутри, то будет ли доступна мне переменная $text внутри eval или она будет считаться неопределенной?
Пишем код, запускаем:
my $text='text';
eval('print $text;');
Видим text, делаем вывод.
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2007.01.12 11:17.56
Ответить с цитатой
Xak
http://wdh.suncloud.ru/perl10.htm#feval

Функция eval
Синтаксис: eval аргумент
Аргументы: аргумент — выражение или блок

Если аргумент является выражением, то его значение вычисляется в скалярном контексте, компилируется и исполняется как PERL-сценарий. Если аргумент опущен, то вычисляется значение пераменной $_. Эта форма функции eval позволяет динамически строить фрагменты PERL-программы.

Если аргумент является блоком, то он компилируется во время компиляции самой функции eval, а исполняется в контексте текущей программы. Обратите внимание, что такой вызов не считается вырожденным циклом и к нему не применимы операторы last, next и redo. Эта форма функции обычно используется для обработки исключений.

И в значении выражения, и в блоке последний символ точка с запятой может быть опущен.

В обоих случаях функция eval возвращает значение последнего вычисленного в ней выражения. Можно использовать и оператор return, так же, как в подпрограммах. ВОзвращаемое значение вычисляется в зависимости от контекста, в котором вызвана функция eval (подробнее об этом см. описание wantarray).

Если произошла ошибка компиляции или была вызвана функция die(), то eval возвращает неопределенное значение, а в переменную $@ заносится сообщение об ошибке. Если ошибок не возникло, то в $@ заносится пустая строка.

Пример использования eval для обработки исключения:

$a = 1; $b = 0;
eval { $answer = $a / $b };
warn $@ if $@;

Примеры использования eval для динамического вычисления выражений:

eval $x; # 1
eval "$x"; # 2
eval '$x'; # 3
eval { $x }; # 4
Выражения 1 и 2 компилируют PERL-программу, содержащуюся в переменной $x и выполняют ее. Выражения 3 и 4 просто возвращают значение переменной $x.

----
проще говоря ты делаешь одно, а вопрос задаешь о другом.
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Xak
Запомнил кнопки...


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 218
Откуда: Тюмень

Статус: Offline
СообщениеДобавлено: 2007.01.12 13:15.41
Ответить с цитатой
Понятно. Спасиба всем. Можно закрыть тему.
_________________
ТюмГНГУ
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Страница 1 из 1
Начать новую тему   Ответить на тему   вывод темы на печать
Показать сообщения:   
Список форумов Шадринский форум -> Программирование -> PHP, PERL, HTML, CSS etc -> Функция eval

 
Перейти: 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы
Рейтинг UralWeb