Книга: Искусство программирования на языке сценариев командной оболочки

Пример 11-12. Замена имени переменной на ее значение, в исходном тексте программы на языке Perl, с помощью eval

Пример 11-12. Замена имени переменной на ее значение, в исходном тексте программы на языке Perl, с помощью eval

В программе "test.pl", на языке Perl:

...

my $WEBROOT = <WEBROOT_PATH>;

...

Эта попытка подстановки значения переменной вместо ее имени:

$export WEBROOT_PATH=/usr/local/webroot

$sed 's/<WEBROOT_PATH>/$WEBROOT_PATH/' < test.pl > out

даст такой результат:

my $WEBROOT = $WEBROOT_PATH;

Тем не менее:

$export WEBROOT_PATH=/usr/local/webroot

$eval sed 's/<WEBROOT_PATH>/$WEBROOT_PATH/' < test.pl > out

# ====

Этот вариант дал желаемый результат -- имя переменной, в тексте программы,

благополучно было заменено на ее значение:

my $WEBROOT = /usr/local/webroot


Команда eval может быть небезопасна. Если существует приемлемая альтернатива, то желательно воздерживаться от использования eval. Так, eval $COMMANDS исполняет код, который записан в переменную COMMANDS, которая, в свою очередь, может содержать весьма неприятные сюрпризы, например rm -rf *. Использование команды eval, для исполнения кода неизвестного происхождения, крайне опасно.

set

Команда set изменяет значения внутренних переменных сценария. Она может использоваться для переключения опций (ключей, флагов), определяющих поведение скрипта. Еще одно применение -- сброс/установка позиционных параметров (аргументов), значения которых будут восприняты как результат работы команды (set `command`).

Оглавление книги

Оглавление статьи/книги

Генерация: 1.392. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз