> 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