I wouldn't dismiss
unpack so soon. If you can develop a specification like the one you just said there, then you can use it. As an alternative, if things really are quite wacky, why not specify the position of elements in a hash and use that in conjunction with
substr?
my @frags = (
{ line => 5, column => 12, length => 10, name => 'foo' },
{ line => 6, column => 12, length => 10, name => 'foo' },
);
# ...
my %var;
# @chunks is an array of arrays, where each contains a
# block of the file.
foreach my $chunk (@chunks)
{
foreach my $frag (@frags)
{
push(@{$var{$frag->{name}}},
substr($chunk->[$frag->{line}],
$frag->{column},
$frag->{length}));
}
}
It will probably be a lot faster to use
substr or
unpack than to glue individual characters together, especially when you are pulling them out of a complex data structure and not just a string.