@sorted = map {$_ -> [0]} sort {$a -> [1] cmp $b -> [1] || $a -> [2] cmp $b -> [2] || $a -> [3] cmp $b -> [3]} map {[$_ => split /,/]} @$outputRef; #### my ($max_symbol, $max_side, $max_account) = (0, 0, 0); foreach (@$outputRef) { my ($symbol, $size, $account) = split /,/; $max_symbol = length $symbol if length $symbol > $max_symbol; $max_size = length $size if length $size > $max_size ; $max_account = length $account if length $account > $max_account; } my $total = $max_symbol + $max_size + $max_account; @sorted = map {substr $_, $total} sort map {my ($symbol, $size, $account) = split /,/; $symbol .= "\0" x $max_symbol; $size .= "\0" x $max_size; $account .= "\0" x $max_account; substr ($symbol, 0, $max_symbol) . substr ($size, 0, $max_size) . substr ($account, 0, $max_account) . $_} @$outputRef;