in reply to Sort problems

Here is my version (not sure what all that split stuff was all about):
use strict; use warnings; sub sortit { my ($alpha_a, $num1_a, $num2_a) = $a =~ /([a-z]+)(\d+)_(\d+)/; my ($alpha_b, $num1_b, $num2_b) = $b =~ /([a-z]+)(\d+)_(\d+)/; my $retn = $alpha_a cmp $alpha_b; return $retn if $retn != 0; $retn = $num1_a <=> $num1_b; return $retn if $retn != 0; return $num2_a <=> $num2_b; } my @list = qw (a1_2 a1_1 a10_10 a2_10 a2_1 a2_2 a10_1 a10_2 a1_10); my @new_list = sort sortit @list; print "@new_list\n";

Replies are listed 'Best First'.
Re^2: Sort problems
by moritz (Cardinal) on Dec 02, 2008 at 10:22 UTC
    my $retn = $alpha_a cmp $alpha_b; return $retn if $retn != 0; $retn = $num1_a <=> $num1_b; return $retn if $retn != 0; return $num2_a <=> $num2_b;

    That can be compacter written as:

    return $alpha_a cmp $alpha_b || $num1_a <=> $num1_b || $num2_a <=> $num2_b;