Hi Christian,
$text =~ s!<p class="h4">(.*?)Dies(.*?)</p>!<p class="h4">$1Das$2</p>!g;
funktioniert nicht, weil "Dies" (Dein Beispiel) bisweilen mehrfach auftaucht. (Hatte ich in meiner Frage auch geschrieben). Deine Programm-Zeile ersetzt nur das 1.Vorkommen:
#!/usr/bin/perl -w
use strict;
my $text = '<p class="h4">Dies ist ein Test. Dies ist ein Test.</p>';
$text =~ s!<p class="h4">(.*?)Dies(.*?)</p>!<p class="h4">$1Das$2</p>!g;
print $text,"\n";
Ergebnis:
<p class="h4">Das ist ein Test. Dies ist ein Test.</p>
Daher meine (ich vermute: unelegante) while-Schleife.
Jörg