Regex 如何正确地链接Perl替换

Regex 如何正确地链接Perl替换,regex,perl,substitution,Regex,Perl,Substitution,我注意到,当直接在终端中时,很容易将替换链接在一起: perl -p -i -e 's/\xa/\xd/g; s/(<ACROSS PUZZLE>.+<GRID>\r\t)([A-Z\.]{15,})(\r\t.+)/\2/g' _temp.txt; $thisGrid =~ s/\xa/\xd/g; $thisGrid =~ s/(<ACROSS PUZZLE>.+<GRID>\r\t)([A-Z\.]{15,})(\r\t.+)/\2/g;

我注意到,当直接在终端中时,很容易将替换链接在一起:

perl -p -i -e 's/\xa/\xd/g; s/(<ACROSS PUZZLE>.+<GRID>\r\t)([A-Z\.]{15,})(\r\t.+)/\2/g' _temp.txt;
$thisGrid =~ s/\xa/\xd/g;
$thisGrid =~ s/(<ACROSS PUZZLE>.+<GRID>\r\t)([A-Z\.]{15,})(\r\t.+)/\2/g; 
然而,我没有成功地将两个替换组合在一起,因为我重写了一些脚本。目前,作为两个独立的语句,它可以工作,但我不确定如何将这两行组合在一起:

perl -p -i -e 's/\xa/\xd/g; s/(<ACROSS PUZZLE>.+<GRID>\r\t)([A-Z\.]{15,})(\r\t.+)/\2/g' _temp.txt;
$thisGrid =~ s/\xa/\xd/g;
$thisGrid =~ s/(<ACROSS PUZZLE>.+<GRID>\r\t)([A-Z\.]{15,})(\r\t.+)/\2/g; 
首先,我尝试:

$thisGrid =~ s/\xa/\xd/g =~ s/(<ACROSS PUZZLE>.+<GRID>\r\t)([A-Z\.]{15,})(\r\t.+)/\2/g; 
这似乎不起作用


其他类似的线程似乎没有回答我的问题。

foreach循环可以用作主题化器

for ($thisGrid) {
   s/\x0A/\x0D/g;
   s/(?:<ACROSS PUZZLE>.+<GRID>\r\t)([A-Z\.]{15,})(?:\r\t.+)/$1/g; 
}

您可以在-e代码中链接它们,在命令/语句方面也有两行,注意;。如果需要,还可以删除脚本中的换行符,使其成为文本行的一行。虽然读起来更糟。。。问题是你到底想在这里实现什么?如果中间没有新行,您希望发生什么呢?如前所述,perl oneliner使用两个单独的命令进行替换-;说先做左半部,再做右半部。链接没有任何好处,除非第一个生成的结果为true,然后执行第二个-s/old/new/if s/very_old/newer/;或s/very_old/newer/&s/old/new。您的案例不属于此类-代码是线性的:先执行第一次替换,然后再执行第二次替换。另外,不清楚为什么使用s/+\r\t[A-Z\.]{15,}\r\t.+/\2/g而不是s/+\r\t[A-Z\.]{15,}\r\t.+/\1/g。如果结果未在其他地方使用,则使用额外括号的目的是什么?文档不鼓励使用\1,因为它可能导致意外结果。语法为$new\u string=$old\u string=~s/foo/bar/gr=~s/blah/baz/gr。