our @unsorted; local *unsorted = $self->teams(); my @sorted; # Allocate memory up front. $#sorted = $#unsorted; # Is it possible to do this faster? for my $i (0..$#sorted) { local *_ = \($unsorted[$i]); $sorted[$i] = pack 'C6N', 255-($_->get_wins_total()), # Descending 255-($_->get_wins_division()), # Descending 255-($_->get_wins_home()), # Descending 255-($_->get_runs_scored()), # Descending $_->get_runs_allowed(), # Ascending $_->get_reg_schedule_id(), # Ascending $i; } # In-place lexical sort. @sorted = sort @sorted; for my $i (0..$#sorted) { $sorted[$i] = $unsorted[unpack('x6N', $sorted[$i])]; }