> You could try something like this:
> my @res = &sortByWeek ('FRI0101', 'TUE0202', 'MON2359');
> print "@res\n";
> sub sortByWeek {
>       my %WeekNum = ('MON'=>0, 'TUE'=>1, 'WED'=>2, 'THU'=>3, 'FRI'=>4,
>         'SAT'=>5, 'SUN'=>6);
> return map $_->[0], sort { $a->[1] cmp $b->[1] }
>    map [$_, $WeekNum{substr ($_, 0, 3)} . substr ($_, 3, 4)], @_;
> }
> __END__

Thanks.
I got another answers from friends;
In order easy to be understood for me:

[1]
sub sortByWeek {
  my %WeekNum = ('MON'=>0, 'TUE'=>1....);
  return sort{
      $WeekNum{substr($a,0,3)} <=> $WeekNum{substr($b,0,3)} || $a cmp $b
  }@_;
}

[2]
sub sortByWeek {
  map {$_->[0]} sort {$a->[1] <=> $b->[1]}
  map {($t = $_) =~ s/^(...)/$week{$1}/; [$_, $t]} @_;
}

[3]
sub sortByWeek {
    my $v = 0;
    my %dow = map { $_ => $v++ } qw(MON TUE WED THU FRI SAT SUN);
    return map { $_->[0] }
           sort { ($dow{$a->[1]} <=> $dow{$b->[1]}) || ($a->[2] <=> $b->[2]) }
           map { [ $_, /^(\w{3})(\d{2}\d{2})$/ ] } @_;
}

Regards,
Hirosi Taguti
[EMAIL PROTECTED]
_______________________________________________
Perl-Unix-Users mailing list
[EMAIL PROTECTED]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to