in reply to Anchors, bleh :(

Hi,

if the text body can be split flatly (that is not nested)
into parts which need mangling
and into parts to be left alone
it would be easy.
Then, you could loop through the text like this
(but maybe you should not use the patterns from below:-)

use strict; use warnings; my $text = join q{}, <DATA>; my $newtext = q{}; while ($text =~ m{ \G # start where we left (.*?) # text to be mangled (?: # followed by STARTPATTERN # the start of verbatim mark (.*?) # the text to be taken verbatim ENDPATTERN # the end of verbatim mark )? # must not be always present }xmsg) { # add the mangled version of the text $newtext .= mangle($1); if (defined $2) { # if there is a verbatim part, copy it verbatim $newtext .= $2; } } print $newtext; exit 0; sub mangle { return uc $_[0]; } __DATA__ Once upon STARTPATTERNa timeENDPATTERN there was a Perl monk. STARTPATTERNBy steadily trainingENDPATTERN the great virtues he became very wise...
gives
ONCE UPON a time THERE WAS A PERL MONK. By steadily training THE GREAT VIRTUES HE BECAME VERY WISE...
Hope this helps

Replies are listed 'Best First'.
Re^2: Anchors, bleh :(
by oko1 (Deacon) on Feb 10, 2008 at 14:37 UTC

    Thank you - you've just given me the last bit I've been mising on understanding '\G' (I knew about it, but had failed to produce useful code when I'd tried it before.) Much appreciated!

    Unfortunately, with regard to this script, your implementation hits one of the restrictions that I stated: the "mangling" is so extensive that breaking up the text into the 'raw/cooked' bits and then processing each cooked bit (as opposed to the single chunk sans the raw bits) is too expensive, time-wise.

    I'm slowly coming to believe that, given my particular requirements, the 'tag-and-reinsert' method may well be the best one. This is reinforced by the fact that there are modules out there that do the same thing (the [% foo.x %] syntax mentioned previously, etc.) Oh well...

    Again, thank you for your response.