我负责将Perl脚本从Perl v5.6.1(2001)升级到v5.20.2(2015)。我有这两个正则表达式变量:
$BaseLineRegExpA
所以,我有两个问题:
在旧的Perl版本中,$BaseLineRegExpB
和$BaseLine
每次$BaseLineRegExpA
更改时都会重新评估,但在新的Perl中,它不会。我该如何改变?我已经尝试了$BaseLineRegExpA
,但仍然没有改变。
在旧的Perl中,(?i-xsm:^F:\\dd\\)
向:(?^i:^F:\\dd\\)
进行攻击,在新的Perl中,它会向?i-xsm:^
进行篡改。我的问题是,?^i:^
和{{1}}之间是否存在差异?
非常感谢,遗憾的是,这些是遗留脚本,我对Perl知之甚少。
答案 0 :(得分:7)
o
修饰符可防止重新评估替换为正则表达式的变量。很奇怪5.6在5.6上没有发生过这种情况,但可能是因为qr
在该版本中仍然是新的。删除它(将/io
更改为/i
)可以使您的工作方式符合预期。
(?i-xsm)
对有效的正则表达式修饰符标记进行编码(i
已启用,x
,s
和m
为关掉)。在perl 5.14的某个时候,Perl得到了一些新的正则表达式修饰符标志,这将改变所有正则表达式的字符串化。由于这已经是一个向后不兼容的变化,因此决定采用一种方式来限制在路上添加任何新标志所造成的麻烦,因此^
字符用于表示&# 34;默认"一组标志。所以(?^i)
表示"默认标志,加上i
标志"。它们的意思基本相同,你不应该担心。