#! perl -sw use strict; use Data::Dumper; local $\=$/; $::X = 2 unless $::X; my %array=( Key_One =>[ 50,25,100,90], Key_Two =>[ 35,18,110,72], Key_Three =>[100,35, 99,82], ); my @columns; for my $i (0..3) { $columns[$i]->{@{$array{$_}}[$i]} = $_ for keys %array; } print Dumper(\@columns); my @names = qw(One Two Three Four); for my $column (@columns) { print $/,'Column ', shift@names; print "$column->{$_} = $_" for (sort{$b <=> $a} keys %$column)[0 .. $::X-1]; } __DATA__ c:\test>202251 -X=2 $VAR1 = [ { '50' => 'Key_One', '35' => 'Key_Two', '100' => 'Key_Three' }, { '25' => 'Key_One', '18' => 'Key_Two', '35' => 'Key_Three' }, { '110' => 'Key_Two', '99' => 'Key_Three', '100' => 'Key_One' }, { '72' => 'Key_Two', '90' => 'Key_One', '82' => 'Key_Three' } ]; Column One Key_Three = 100 Key_One = 50 Column Two Key_Three = 35 Key_One = 25 Column Three Key_Two = 110 Key_One = 100 Column Four Key_One = 90 Key_Three = 82 c:\test>