Three problems:
1) You're missing square brackets around your array indexes in the topmost sort.
2) @cols is 0-based, so the 9th and 22nd column are in $cols[8] and $cols[21] respectively. You said there are only 22 colums, so $cols[22] is wrong.
3) Your sorts are in the wrong order. The higher precedence one should be at the top to make it execute last.
Finally, borisz is right. It'll be faster if you combine your two sorts into one.
@sortedarry = map { $_ ->[0] } sort { $a->[1] cmp $b->[1] || $a->[2] <=> $b->[2] } map { my @cols = split /\t/; [ $_, $cols[8], $cols[21] ] } @foo; print "$_\n" foreach @sortedarry;
In reply to Re: schwartzian transform and sorting on two columns
by ikegami
in thread schwartzian transform and sorting on two columns
by indapa
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |