I know that I am a week late, but I found a one-line change to your original code that think is worth sharing. Use the function
substr rather than s/// to insert the id. Note that you already have $+{text} from your first match.
use strict;
use warnings;
use Test::More tests=>3;
my @required = (
qq(<h2 id="match_literal_text">)
.qq(2.1. Match Literal Text</h2>\n),
qq(<h2 id="match_nonprintable_characters">)
.qq(2.2. Match Nonprintable Characters</h2>\n),
qq(<h2 id="match_one_of_many_characters">)
.qq(2.3. Match One of Many Characters</h2>\n),
);
my @ol_file_array = (
"<h2>2.1. Match Literal Text</h2>\n",
"<h2>2.2. Match Nonprintable Characters</h2>\n",
"<h2>2.3. Match One of Many Characters</h2>\n",
);
my $regex = qr/
(?<tag>(<\w\d))
(?<closing_bracket>>)
(?<ol_numbers>(\d\.(\d+?)\.))\s
(?<text>(.+))
(?<closing_tag>(\b<\/\w\d>))
/xms;
foreach (@ol_file_array) {
if ($_ =~ m/$regex/g) {
substr($_, 3, 0) = changer( $+{text} );
ok( $_ eq shift(@required), $_ );
}
else {
... # blah blah blah
}
}
sub changer{
(my $id = $_[0]) =~ tr /A-Z /a-z_/;
return qq/ id="$id"/;
}
OUTPUT:
C:\Users\Bill\forums\monks> tony3.pl
1..3
ok 1 - <h2 id="match_literal_text">2.1. Match Literal Text</h2>
#
ok 2 - <h2 id="match_nonprintable_characters">2.2. Match Nonprintable
+Characters</h2>
#
ok 3 - <h2 id="match_one_of_many_characters">2.3. Match One of Many Ch
+aracters</h2>
#
-
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.