Как я могу использовать таблицы отправки в Perl?

Возможный дубликат:
Как мне реализовать таблицы диспетчеризации в Perl?

У меня есть хэш-таблица, содержащая такие команды, как int(rand()) и т. Д. Как мне выполнить эти команды?

2 ответа

Решение

Ты можешь использовать eval($str) выполнить код Perl, который вы храните в строковой переменной, $str, В качестве альтернативы вы можете хранить свой код как ссылки на функции внутри хеша, что-то вроде:

$hash{'random'} = sub { int(rand()) }; 

Таким образом, вы могли бы написать $hash{'random'}->() выполнять функцию всякий раз, когда вы хотите случайное значение.

Смотрите также Реализация таблиц рассылки на PerlMonks.

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

Вы можете использовать модуль Safe, чтобы удалить дыру в безопасности (не уверен, насколько пуленепробиваемый, но гораздо лучше, чем голый eval), но проблемы с производительностью всегда будут существовать, так как Perl должен будет скомпилировать ваш код до его выполнения, пока выполняется основная программа.

Другие вопросы по тегам