2

問題: 認識されないエスケープ \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 で動作しない - v5.10.1 (*) x86_64-linux-thread-multi 用にビルド

4

1 に答える 1

6

問題は単純に、文字列に文字が$propname含まれていること\mです。

本当にバックスラッシュを含めるつもりなら (XML タグを扱っているように見えるのでそうではないと思います)、次のように書く必要があります。

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

変数内のメタ文字をエスケープする

于 2012-08-04T19:58:22.100 に答える