Here's a variation for 5.8 and also for 5.10 that's simpler (for some definition of 'simpler') and that I think should run faster since it avoids /e code evaluation during replacement, but again, I've done no benchmarking. Of course, the same approach applies as well to the 5.14 version code. Tested with the same Perl versions/vendors as before. Also to repeat: adding more of your own test cases would probably be a good idea.
# should be ok for any version 5.8.9+
sub replace_5_8_9_b {
my ($string,
) = @_;
my $rx_dquot = qr{ " [^"]* (?: "" [^"]* )* " }xms;
my $rx_ceol = qr{ ' [^\n]* \n? \z }xms;
my $rx_skipem = qr{ $rx_ceol | $rx_dquot }xms; # alt order immate
+rial
# my $rx_skipem = qr{ $rx_dquot | $rx_ceol }xms; # alt order immate
+rial
my $rx_keepit = qr{ (?! $rx_rename) (?! $rx_dquot) (?! $rx_ceol) .
+ }xms;
$string =~ s{
\G
((?: (?> $rx_keepit*) | (?> $rx_skipem*))*) # skip this stuff
($rx_rename) # grab and rename
}
{$1$renames->{$2}}xmsg;
return $string;
}
# uses \K and possessive quantifiers from 5.10+
sub replace_5_10_1_b {
my ($string,
) = @_;
my $rx_dquot = qr{ " [^"]*+ (?: "" [^"]*+ )*+ " }xms;
my $rx_ceol = qr{ ' [^\n]*+ \n?+ \z }xms;
my $rx_skipem = qr{ $rx_ceol | $rx_dquot }xms; # alt order immate
+rial
# my $rx_skipem = qr{ $rx_dquot | $rx_ceol }xms; # alt order immate
+rial
my $rx_keepit = qr{ (?! $rx_rename) (?! $rx_dquot) (?! $rx_ceol) .
+ }xms;
$string =~ s{
\G
(?: $rx_keepit*+ | $rx_skipem*+)* # skip this stuff
\K
($rx_rename) # grab and rename
}
{$renames->{$1}}xmsg;
return $string;
}
-
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.
|