If you don't mind consuming the input, you can use an anchored regex to eat the input as you generate the summary.
my %mapping =
(
'[a-zA-A0-9]+' => 'A',
);
my $summary = '';
CHUNK: while (length $filedata)
{
foreach my $reg (keys %mapping)
{
if ($filedata =~ s/^$reg//)
{
$summary .= $mapping{$reg};
next CHUNK;
}
}
die "Chunk starting with '". substr($filedata, 0,10) . "' did not ma
+tch any rules!";
}
If I'm confused as to your goal and you actually want to do the opposite of this, you can take the reverse of the %mapping hash and concatenate a big regex string by looking up the regex substring for each character in the summary in turn.