my $raSortedEvents = [ @{ $raEvents }[
map { unpack q{x13N}, $_ }
sort
map {
pack( q{A8}, uc $raEvents->[ $_ ]->{ severity } )
.
(
$raEvents->[ $_ ]->{ severity } eq q{OK}
? pack( q{cl>},
$raEvents->[ $_ ]->{ event_age } < 0 ? 0 : 1,
$raEvents->[ $_ ]->{ event_age } )
: pack( q{c}, $raEvents->[ $_ ]->{ event_age } < 0 ? 1 : 0 )
.
~ pack( q{l>}, $raEvents->[ $_ ]->{ event_age } )
)
.
pack( q{N}, $_ );
}
0 .. $#{ $raEvents } ]
];
Even more ew'ness I suppose but I did say this was over-complicated for the OP's problem and was just to illustrate a technique. It would perhaps look less dense if broken down into two stages.
my @sortOrder =
map { unpack q{x13N}, $_ }
sort
map {
pack( q{A8}, uc $raEvents->[ $_ ]->{ severity } )
.
(
$raEvents->[ $_ ]->{ severity } eq q{OK}
? pack( q{cl>},
$raEvents->[ $_ ]->{ event_age } < 0 ? 0 : 1,
$raEvents->[ $_ ]->{ event_age } )
: pack( q{c}, $raEvents->[ $_ ]->{ event_age } < 0 ? 1 : 0 )
.
~ pack( q{l>}, $raEvents->[ $_ ]->{ event_age } )
)
.
pack( q{N}, $_ );
}
0 .. $#{ $raEvents };
my $raSortedEvents = [ @{ $raEvents }[ @sortOrder ] ];
|