$VAR1 = { '315' => { '8' => 0 }, '329' => { '6' => 0 }, '352' => { '5' => 0 }, '390' => { '1' => 0 }, '280' => { '7' => 1 }, '360' => { '9' => 0 }, '349' => { '4' => 0 }, '305' => { '10' => 0 }, '380' => { '3' => 1 }, '251' => { '2' => 0 } }; #### sample 1 2 3 4 5 6 7 8 9 10 file1 0 0 1 0 0 0 1 0 0 0 #### my %output=(); foreach my $k1(keys %pos2base2bin){ foreach my $k2 (sort{$a <=> $b} keys %{ $pos2base2bin{$k1} }){ push @{$output{$k2}},$pos2base2bin{$k1}{$k2} } } my @array=(); foreach my $k(sort{$a <=> $b} keys %output){ foreach my $val(@{$output{$k}}){ push @array,$val; } } print join("\t",$f,@array),"\n"; # $f is the filename