http://www.perlmonks.org?node_id=445870


in reply to Interpolate Text Not Inside a Certain Tag

I realize you already have a solution, but what about this:
sub boldify { local $/ = undef; my $input = shift; my @parts = split /``/, $input; foreach my $i (0..scalar(@parts)) { $parts[$i] =~ s/\*\*(.+?)\*\*/<b>$1<\\b>/gs if ($i % 2 == 0); } return join '', @parts; }

Here's a test:

my $test_data = <<INPUT; This is **bold**, but ``this is **not** bold`` ``This is **not** bold``, but this is **bold**, and ``this is **not** +bold`` This sure is **bold** and so is **this**, but ``**this**`` aint INPUT print boldify($test_data);

output

This is <b>bold<\b>, but this is **not** bold This is **not** bold, but this is <b>bold<\b>, and this is **not** bol +d This sure is <b>bold<\b> and so is <b>this<\b>, but **this** aint

Replies are listed 'Best First'.
Re^2: Interpolate Text Not Inside a Certain Tag
by Anonymous Monk on Apr 11, 2005 at 14:39 UTC
    Quite interesting, but I don't think it's flexible enough. For example, if later I decide that `` enclosed by spaces ( /\s``\s/ ) shouldn't be recognized as an "escape mark", well, how can we detect it?