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

Regex 使用PERL v5.10.1在正则表达式中传递了无法识别的转义\m,regex,perl,Regex,Perl,问题:在正则表达式中传递了无法识别的转义\m;以%%为标志; 870 871$$inprop=''如果($thisline=~m!!); 872$thisline=~s%%%g; 873$thisline=~s%\s*$%; 874 875 while($thisline){ 876#打印“thisline=$thisline”。“XX\n”; 877(我的$propname=$thisline)=~s!\s*!$1!; 878如果($propname=~m!.group\s*!){ 879 8

问题:在正则表达式中传递了无法识别的转义\m;以%%为标志; 870 871$$inprop=''如果($thisline=~m!!); 872$thisline=~s%%%g; 873$thisline=~s%\s*$%; 874 875 while($thisline){ 876#打印“thisline=$thisline”。“XX\n”; 877(我的$propname=$thisline)=~s!\s*!$1!; 878如果($propname=~m!.group\s*!){ 879 880(my$propvalue=$thisline)=~s.*(.*).*!$1!; 881如果($propvalue=~/\s*com.alcatel.axs.(.*)\s*/){ 882 883我的$groupId=$1; 884 my$thisversion=getThisVersion($depver、$groupId、$artifactId、$thisartifactId、$br、$paramvalue、$masterpomversion); 885推送(@{$newpom},.$thisversion.'.“\n”); 886 } 887 } 888 889 my$currentline=$thisline; 890$thisline=~s!*?!!; 891最后一个if($currentline=$thisline); 892 } 893 } 894 } 背景:

该脚本在为i386 linux多线程构建的PerlV5.8.8上运行良好,但是


无法使用为x86_64-linux-thread-multi构建的Perl-v5.10.1(*),问题只是
$propname
中的字符串包含字符
\m

如果您真的想包含反斜杠(我猜不是因为您使用的是XML标记),那么您需要编写

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

如果您认为这有助于尝试,则要转义变量中的任何元字符

:能否在更短的测试脚本中重现相同的错误?为什么?假设有一个很短的脚本,它除了删除具有指定属性的字符之外什么也不做,然后打印出剩下的文本。(顺便问一句,第890行没有使用
/g
--或者在您的情况下,
!g
--模式修饰符?)看起来像是
\m
$line
放入
$propname
。然后它被嵌入到regexp中而不引用。在失败之前,
$thisline
中的实际内容是什么?$thisline='something';您可以通过使用quotemeta或
\Q.转义元字符(如反斜杠)来解决问题\E
。非常感谢您的帮助,但其他Surroutine对此表示不满。在./build.pl第1025行的regexp编译中使用未初始化的值。在./build.pl第1026行的串联(.)或字符串中使用未初始化的值。
$thisline =~ s!.*?</\Q$propname\E>!!