# untested! use Sort::Key qw(multikeysorter); my @types = qw(int str str str str int); sub gen_sorter { my @ix = map abs($_), @_; my @t; for (@_) { my $t = $types[abs $_]; $t = "-$t" if $_ < 0 push @t, $t; } multikeysorter (sub { my @k = split /\|/; $k[5] =~ tr/>(@data);