使用PERL v5.10.1在regex中传递无法识别的escape \ m

时间:2012-08-04 19:21:32

标签: regex perl

问题:无法识别的escape \ m在正则表达式中传递;标记为< - HERE in m /.*?/ at ./build.pl第890行。

856 sub addProperity {
857 
858     my ($line,$inprop,$newpom,$depver,$artifactId,$thisartifactId,$br,$paramvalue,$masterpomversion) = @_;
859 
860     my $alllines;
861 
862     if ( $$inprop ) {
863 
864             (my $thisline = $line) =~ s!\r!!;
865             chomp $thisline;
866 
867             $thisline =~ s%<!--.*?-->%%g;
868             $thisline =~ s%<!--.*%%;
869             $thisline =~ s%.*-->%%;
870 
871             $$inprop = '' if ( $thisline =~ m!</properties>! );
872             $thisline =~ s%<.{0,1}properties>%%g;
873             $thisline =~ s%\s*$%%;
874 
875             while ( $thisline ) {
876                 #print "thisline=$thisline"."XX\n";
877                 ( my $propname = $thisline ) =~ s!\s*<(.*?)>.*!$1!;
878                 if ( $propname =~ m!.group\s*! ) {
879 
880                 (my $propvalue = $thisline ) =~ s!.*<$propname>(.*?)</$propname>.*!$1!;
881                 if ( $propvalue =~ /\s*com.alcatel.axs.(.*)\s*/ ) {
882 
883                     my $groupId=$1;
884                     my $thisversion=getThisVersion($depver,$groupId,$artifactId,$thisartifactId,$br,$paramvalue,$masterpomversion);
885                     push ( @{$newpom}, '<'.$propname.'.repversion>'.$thisversion.'</'.$propname.'.repversion>'."\n");
886                 }
887             }
888 
889             my $currentline=$thisline;
890             $thisline =~ s!.*?</$propname>!!;
891             last if ($currentline=$thisline);
892         }
893     }
894 }

背景:

脚本运行正常 - 为i386-linux-thread-multi构建的Perl v5.8.8,但是

不支持Perl - 为x86_64-linux-thread-multi构建的v5.10.1(*)

1 个答案:

答案 0 :(得分:6)

问题很简单,$propname中的字符串包含字符\m

如果你真的想要包含一个反斜杠(我猜不会因为看起来你正在使用XML标签)那么你需要写

$thisline =~ s!.*?</\Q$propname\E>!!

转义变量

中的任何元字符