Basically, yes, though I am going to be doing it all at once (using a technique described in a later answer) - reading in the entire file, and then processing it with:
$fragment =~ s/<foo>\d+<\/foo>/'<foo>' . $i++ . '<\/foo>'/eg;
Thank you. | [reply] [Watch: Dir/Any] [d/l] |
c:\@Work\Perl\monks>perl -wMstrict -le
"use 5.010;
;;
my $s = qq{www<foo> 3 </foo>\n<bar>999</bar>\n<foo>14 </foo>xx\n}
. qq{<bar>998</bar>\nyyy<foo> 159</foo>z\n<bar>997</bar>\n}
;
print qq{[[$s]]};
;;
{ my $n = 1;
$s =~ s{ <(foo)> \s* \K \d+ (?= \s* </\g-1>) }{ $n++ }xmsge;
}
print qq{[[$s]]};
"
[[www<foo> 3 </foo>
<bar>999</bar>
<foo>14 </foo>xx
<bar>998</bar>
yyy<foo> 159</foo>z
<bar>997</bar>
]]
[[www<foo> 1 </foo>
<bar>999</bar>
<foo>2 </foo>xx
<bar>998</bar>
yyy<foo> 3</foo>z
<bar>997</bar>
]]
If you want to get rid of the leading/trailing whitespace, that's easily done. If you only have pre-5.10 regexes to work with, that can be handled too, although it's a bit more messy.
Give a man a fish: <%-{-{-{-<
| [reply] [Watch: Dir/Any] [d/l] [select] |