As I understand your task (which seems to be different from BrowserUk), this should do it:
#!/usr/bin/perl -w
use strict;
my %hash = (a=>2, b=>1, c=>5, d=>3, e=>4);
my $input = "abcdaeec";
for (2, 3) {
print "n=$_: ";
my $n = $_ - 1;
my @sums;
while ( $input =~ /(.)(?=.{$n}(.))/g ) {
push @sums, $hash{$1} + $hash{$2};
}
print "@sums\n";
}
__END__
n=2: 7 4 7 7 6 9
n=3: 5 3 9 7 7
Update: let YAPE::Regex::Explain explain what the regex does:
use YAPE::Regex::Explain;
print YAPE::Regex::Explain->new( qr/(.)(?=.{1}(.))/ )->explain;
__END__
The regular expression:
(?-imsx:(.)(?=.{1}(.)))
matches as follows:
NODE EXPLANATION
----------------------------------------------------------------------
(?-imsx: group, but do not capture (case-sensitive)
(with ^ and $ matching normally) (with . not
matching \n) (matching whitespace and #
normally):
----------------------------------------------------------------------
( group and capture to \1:
----------------------------------------------------------------------
. any character except \n
----------------------------------------------------------------------
) end of \1
----------------------------------------------------------------------
(?= look ahead to see if there is:
----------------------------------------------------------------------
.{1} any character except \n (1 times)
----------------------------------------------------------------------
( group and capture to \2:
----------------------------------------------------------------------
. any character except \n
----------------------------------------------------------------------
) end of \2
----------------------------------------------------------------------
) end of look-ahead
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------
And see perlop for what m//g does in scalar context (like the while (...) here).
-
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.
|