Es gibt die vordefinierten Variablen Prematch und Postmatch (Link hast Du in Deinem Posting zu $#name erhalten). Die zu nutzen ist aber eine erhebliche Geschwindigkeitsbremse.
Trotz der Warnung habe ich es einmal damit versucht - und es funktioniert
fast!
my $times = 5;
my $var = "XYZ";
my $ersatz = "123456";
my $pat = qr/(?<!$var)(?:$var){$times}(?!$var)/;
my $text = "aaaXYZXYZXYZXYZXYZbbb";
$text =~ s/$pat/$`$ersatz$'/g;
$text =~ s/$pat/$ersatz/g;
reicht vollkommen. Pre und Postmatch sind nicht notwendig.
print "Text-neu: $text<br>"; # <=== Text-neu: aaaaaa123456bbbbbb
print "$` $'<br>"; # <=== aaa bbb
>
>
> Das heißt $` und $' sind richtig gefüllt.
Doch sie sind. Aber die Verdoppelung geschieht durch eine unnötige Anwendung.
Teste mal diesen string
my $text = "-----123XYZXYZXYZXYZXYZ123-----";
Dann siehst du besser, was geschieht.
mfg Beat
--
Woran ich arbeite:
[X-Torah](http://www.elcappuccino.ch/cgi/tok.pl?extern=1-pub-com3306-1)
<°)))o>< ><o(((°>o