【发布时间】:2015-06-09 07:40:29
【问题描述】:
我负责将此 Perl 脚本从 Perl v5.6.1 (2001) 升级到 v5.20.2 (2015)。我有这 2 个正则表达式变量:
foreach (@filelist) {
chomp;
my $File = $_;
if ( $File =~ qr/.+/o ) {
if ( $BaseLine ) {
$BaseLineRegExpA = qr/^\Q$BaseLine\E\\/io; #these 2 regexes
$BaseLineRegExpB = qr/^\Q$BaseLine\E;/io; #these 2 regexes
if ( $File =~ /$BaseLineRegExpA/ ) {
#...
} elsif ( (!($File =~ /$BaseLineRegExpB/)) && (!(lc( $File ) eq lc( $BaseLine ) )) ) {
$BaseLine = $File;
}
}
}
}
所以,我有两个问题:
在旧 Perl 版本中,
$BaseLineRegExpA和$BaseLineRegExpB每次$BaseLine更改时都会重新计算,但在新 Perl 中,它不会。我如何让它改变?我试过我的$BaseLineRegExpA,还是没变。在旧 Perl 中,
$BaseLineRegExpAeval 为:(?i-xsm:^F:\\dd\\),而在新 Perl 中,它 eval 为(?^i:^F:\\dd\\)。我的问题是,?i-xsm:^和?^i:^之间有什么不同吗?
非常感谢,不幸的是,这些是遗留脚本,我对 Perl 了解不多。
【问题讨论】: