I believe this is what you're looking for.
Code:
#! /usr/bin/perl
use strict ;
use warnings ;
use Data::Dumper ;
my $str = qq~This <b>contains</b> both text
and <a href="http://www.w3c.org">html</a>.~ ;
print $str, "\n\n" ;
# Do the replacement...
my @tags = () ;
my $index = -1 ;
$str =~ s|<([^>]+)>(?{ push @tags, $1 ; $index++ })|<$index>|gs ;
# Show the replaced text & the stored tags.
print "-----\n", Dumper( \@tags ), "\n\n", $str, "\n\n" ;
# Sub the tags back in.
$index = -1 ;
$str =~ s|<([^>]+)>(?{ $index++ })|<$tags[$index]>|gs ;
# Show the string with the HTML put back in.
print "-----\n", $str, "\n\n" ;
Output:
This <b>contains</b> both text
and <a href="http://www.w3c.org">html</a>.
-----
$VAR1 = [
'b',
'/b',
'a href="http://www.w3c.org"',
'/a'
];
This <0>contains<1> both text
and <2>html<3>.
-----
This <b>contains</b> both text
and <a href="http://www.w3c.org">html</a>.
Update:
Argh. I was downtown about an hour after I posted this, and it suddenly occurred to me that the second substitution makes much more sense as:
# Sub the tags back in.
$str =~ s|<(\d+)>|<$tags[$1]>|gs ;
_______________
D
a
m
n
D
i
r
t
y
A
p
e
Home Node
|
Email
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.