i in charge of upgrading perl script perl v5.6.1 (2001) v5.20.2 (2015). have these 2 regex variable:
foreach (@filelist) { chomp; $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; } } } } so, have 2 questions:
in old perl version,
$baselineregexpa,$baselineregexpbgets reevaluate every time$baselinechanges, in new perl, not. how make changes? i've tried$baselineregexpa, still not change.in old perl,
$baselineregexpaevals to:(?i-xsm:^f:\\dd\\), , in new perl, evals(?^i:^f:\\dd\\). questions is, there different between?i-xsm:^,?^i:^?
thanks much, unfortunately, these legacy scripts , don't know perl.
the
omodifier prevents re-evaluating variables substituted regexes. it's curious didn't happen on 5.6, it's becauseqrstill new in version. removing (changing/io/i) should make things work way expect.the
(?i-xsm)encodes regex modifier flags in effect (iturned on,x,s, ,mturned off). sometime around perl 5.14, perl got new regex modifier flags, change stringification of regexes. since backwards-incompatible change, decided in way limit hassle caused adding new flags down road, ,^character used represent "default" set of flags.(?^i)means "the default flags, plusiflag". both mean same thing, , there's nothing should worry about.
Comments
Post a Comment