问题:无法识别的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(*)
答案 0 :(得分:6)
问题很简单,$propname
中的字符串包含字符\m
。
如果你真的想要包含一个反斜杠(我猜不会因为看起来你正在使用XML标签)那么你需要写
$thisline =~ s!.*?</\Q$propname\E>!!
转义变量
中的任何元字符