排序除了sort还有其他能满足我的要求的么?

排序除了sort还有其他能满足我的要求的么?

我现在
my @array = (STR2_C10,STR11_U9,STR1_C1,STR0_U9,STR10_C2,STR0_C1,STR2_U9);
     foreach my $a (sort @array){
        print "$a \n";
    }

得到的结果是:

STR0_C1
STR0_U9
STR10_C2
STR11_U9
STR1_C1
STR2_C10
STR2_U9

我的本意是想得到:
STR0_C1
STR0_U9
STR1_C1
STR2_C10
STR2_U9
STR10_C2
STR11_U9


因为不能修改array里边的东西,所以只能考虑如何更好的排序了。请各位高手指教一下!


QUOTE:
原帖由 soway 于 2008-11-10 17:35 发表
我现在
my @array = (STR2_C10,STR11_U9,STR1_C1,STR0_U9,STR10_C2,STR0_C1,STR2_U9);
     foreach my $a (sort @array){
        prin ...

怎样排序的代码可以自己写

QUOTE:
  sort USERSUB LIST
  sort BLOCK LIST
  sort LIST

我想实现,排序的时候
_最优先
数字 第二优先
小写字母 第三优先
大写字母 第四优先

perl里边的顺序是:
数字第一
大写第二
_第三
小写第四
按照ascii来的


QUOTE:
原帖由 soway 于 2008-11-10 18:45 发表
我想实现,排序的时候
_最优先
数字 第二优先
小写字母 第三优先
大写字母 第四优先

perl里边的顺序是:
数字第一
大写第二
_第三
小写第四
按照ascii来的

把字串分割成几部分来比较。各部分的升序、降序自己选择。
sub by_dic{
   my $aa = lc $a;
   my $bb = lc $b;
$aa =~ s/[\$]+/#/g;

$aa =~ s/[_]+/*/g;
#$bb =~ s/[\W_]+/*/g;

$bb =~ s/[\$]+/#/g;

$bb =~ s/[_]+/*/g;
   $aa cmp $bb;
}
###########################################################

  foreach my $c (sort by_dic keys %{$db->{Component}}){


这样解决了,目前的顺序是 $ _ 1 2 a b A B