Предполагая, что Perl script позволяет пользователям указывать несколько выражений текстового фильтра в файле конфигурации, есть ли безопасный способ позволить им вводить регулярные выражения, без возможности непредвиденных побочных эффектов или выполнения кода? Без фактического анализа регулярных выражений и проверки их на проблемные конструкции. Не будет никакой замены, только соответствия.
Как в стороне, есть ли способ проверить, действительно ли указанное регулярное выражение действительно используется? Я хотел бы выпустить предупреждения, если было введено что-то вроде /foo (bar/
.
Спасибо, Z.
EDIT:
Спасибо за очень интересные ответы. С тех пор я узнал, что следующие опасные конструкции будут оцениваться только в регулярных выражениях, если используется прагма
use re 'eval'
:
(?{code})
(??{code})
${code}
@{code}
По умолчанию используется no re 'eval'
; поэтому, если я чего-то не упускаю, должно быть безопасно читать регулярные выражения из файла, причем единственной проверкой является eval/catch, размещенная Axeman. По крайней мере, я не смог скрыть ничего плохого в своих тестах.
Еще раз спасибо. Z.