Как я могу использовать таблицы отправки в Perl?
Возможный дубликат:
Как мне реализовать таблицы диспетчеризации в Perl?
У меня есть хэш-таблица, содержащая такие команды, как int(rand()) и т. Д. Как мне выполнить эти команды?
2 ответа
Ты можешь использовать eval($str)
выполнить код Perl, который вы храните в строковой переменной, $str
, В качестве альтернативы вы можете хранить свой код как ссылки на функции внутри хеша, что-то вроде:
$hash{'random'} = sub { int(rand()) };
Таким образом, вы могли бы написать $hash{'random'}->()
выполнять функцию всякий раз, когда вы хотите случайное значение.
Смотрите также Реализация таблиц рассылки на PerlMonks.
Как уже говорили другие, вы можете выполнить их, используя eval
, Тем не менее, обратите внимание, что выполнение произвольных строк возможно испорченного происхождения через eval
является серьезной дырой в безопасности, а также может быть медленной, если производительность вашего приложения имеет значение.
Вы можете использовать модуль Safe, чтобы удалить дыру в безопасности (не уверен, насколько пуленепробиваемый, но гораздо лучше, чем голый eval
), но проблемы с производительностью всегда будут существовать, так как Perl должен будет скомпилировать ваш код до его выполнения, пока выполняется основная программа.