I can't help but think that the biggest problem is that your using the wrong data structure. From your output requirements, it seems like you need an array of hashes, rather the a hash of arrays.
To that end, the first loop will transform your described structure into what I think would be more appropriate. I've dumped the output to show how I think the data would be better structured.
Of course, if you have the option, and no other code is dependant upon the existing structure, it would be better to build it this way in the first place rather than needing to transform it.
When the data is structured this way, printing the output becomes almost trivial and requires only a simple sort method.
#! 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>
Cor! Like yer ring! ... HALO dammit! ... 'Ave it yer way! Hal-lo, Mister la-de-da. ... Like yer ring! |