Perl不会重新评估正则表达式变量

时间:2015-06-03 03:08:23

标签: regex perl

我负责将Perl脚本从Perl v5.6.1(2001)升级到v5.20.2(2015)。我有这两个正则表达式变量:

$BaseLineRegExpA

所以,我有两个问题:

  1. 在旧的Perl版本中,$BaseLineRegExpB$BaseLine每次$BaseLineRegExpA更改时都会重新评估,但在新的Perl中,它不会。我该如何改变?我已经尝试了$BaseLineRegExpA,但仍然没有改变。

  2. 在旧的Perl中,(?i-xsm:^F:\\dd\\)向:(?^i:^F:\\dd\\)进行攻击,在新的Perl中,它会向?i-xsm:^进行篡改。我的问题是,?^i:^和{{1}}之间是否存在差异?

  3. 非常感谢,遗憾的是,这些是遗留脚本,我对Perl知之甚少。

1 个答案:

答案 0 :(得分:7)

  1. o修饰符可防止重新评估替换为正则表达式的变量。很奇怪5.6在5.6上没有发生过这种情况,但可能是因为qr在该版本中仍然是新的。删除它(将/io更改为/i)可以使您的工作方式符合预期。

  2. (?i-xsm)对有效的正则表达式修饰符标记进行编码(i已启用,xsm为关掉)。在perl 5.14的某个时候,Perl得到了一些新的正则表达式修饰符标志,这将改变所有正则表达式的字符串化。由于这已经是一个向后不兼容的变化,因此决定采用一种方式来限制在路上添加任何新标志所造成的麻烦,因此^字符用于表示&# 34;默认"一组标志。所以(?^i)表示"默认标志,加上i标志"。它们的意思基本相同,你不应该担心。