in reply to sorting and other problems in hash

If I understand the problem correctly, then you might try approaching it like this:

#!/usr/bin/perl -w use strict; our ($File1, $File2) = qw/file1 file2/; open File1 or die "$File1: $!\n"; open File2 or die "$File2: $!\n"; my ($key, %results); while (<File1>){ next if /^\s*$/; chomp; if (/^>\s*(\S+)/){ $key = $1; } else { $results{$key} = [ split ]; } } close File1; my ($len, $side, $str); while (<File2>){ next if /^\s*$/; if (/^>([^_]+)_(left|right).*?(\d+)\s*$/){ print; $str = $1; $side = $2; $len = $3; } else { my @list; @list = @{$results{$str}}; if ($side eq 'left'){ die "$str is too short for a left slice of $len!\n" unless @list >= $len; print "@list[0..$len-1]\n"; } else { die "$str is too short for a right slice of $len!\n" unless @list >= $len; print "@list[@list-$len..$#list]\n"; } } } close File2;

--
"Language shapes the way we think, and determines what we can think about."
-- B. L. Whorf