无法识别的转义 m 使用 PERL v5.10.1 在正则表达式中传递



问题:无法识别的转义 \m 在正则表达式中通过;在 ./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"."XXn";
877                 ( my $propname = $thisline ) =~ s!s*<(.*?)>.*!$1!;
878                 if ( $propname =~ m!.groups*! ) {
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 }

背景:

该脚本在 - Perl v5.8.8 上为 i386-linux-thread-multi 构建,但是

不适用于 Perl - v5.10.1 (*) 为 x86_64-linux-thread-multi 构建

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

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

$thisline =~ s!.*?</Q$propnameE>!!

转义变量中的任何元字符

最新更新