質問: 2回以上繰り返される文字列の削除について 以下の文字列(置換前)で、-aaa について複数存在しているので、 最初の -aaa を残して残りの -aaa をすべて削除したいと考えています。 1回の正規表現+置換で行いたいのですが、どのようにいすればよいでしょうか? 【置換前】 -bbb -aaa -ccc -aaa -ddd -eee -aaa -fff 【置換後】 -bbb -aaa -ccc -ddd -eee -fff ちなみに、複数回の正規表現+置換を使ってよい場合は、 while (m/( -aaa.*) -aaa/) { s/( -aaa.*) -aaa/$1/; } でできると考えています。(動作確認まではしていないので間違ってるかも)
回答: 特殊変数の $` (マッチ前部分文字列) を利用すればできると思います。 $str = '-bbb -aaa -ccc -ddd -eee -aaa -fff'; $str =~ s/( -aaa)/$` =~ m| -aaa| ? '' : $1/eg; print "$str\n";