0

I have the latest Perl this time. And this bombs

>perl -e '$pat = q(^).qr{(??{$_})}x; print /$pat/'
Eval-group not allowed at runtime, use re 'eval' in regex m/^(?^x:(??{$_}))/ at -e line 1.

Why, if any of these are fine:

>perl -e 'print /q(^).qr{(??{$_})}x/'

>perl -e '$pat = qr{(??{$_})}x; print /$pat/'

>perl -e '$pat = q(^).qr{$_}; print /$pat/'
4

1 回答 1

4

perl 警告或错误消息意味着什么的答案总是从咨询perldoc perldiag开始,它说:

(F) Perl 试图在运行时编译一个包含“(?{ ... })”零宽度断言的正则表达式,就像模式包含插值时一样。由于这是一种安全风险,因此是不允许的。如果您坚持,您仍然可以通过使用“re 'eval'”编译指示或通过在运行时从内插字符串显式构建模式并在 eval() 中使用它来执行此操作。请参阅 perlre 中的 "(?{ code })"。

由于这是一个潜在的高度不安全的操作,可能直接运行作为用户输入输入的代码,因此您必须显式启用它。

于 2013-10-24T00:58:04.273 回答