Perlコーディング初心者質問スレ Part 51
■ このスレッドは過去ログ倉庫に格納されています
0800nobodyさん
2006/08/31(木) 18:23:37ID:???ならないか? それともいい関数があるのかなあ。
普通に
sort { length $b <=> length $a or $a <=> $b } @list
でいいじゃん。or 797 のやり方。
############ お試しソース ############
use Time::Local ;
sort { &conv($a ) <=> &conv ($b) } @list ;
sub conv ($) {
my $uru = sub { # 閏年の計算。
return $_[0] % 400 == 0 ? 1 : $_[0] % 100 == 0 ? 0 : $_[0] % 4 == 0 ? 1 : 0 ;
} ;
my @dat = # ソートの優先順位を付けるための小細工。
length $_[0] == 8 ? ( $_[0] =~ /^(¥d{4})(¥d{2})(¥d{2})$/, 0, 0, 0 ) :
length $_[0] == 6 ? ( $_[0] =~ /^(¥d{4})(¥d{2})$/, 0, 23, 59, 58 ) : # 日付まで分かってるものよりも後にするため。
( $_[0] =~ /^(¥d{4})$/, 12, 0, 23, 59, 59 ) ; # 月まで分かってるものよりも後にするため。
my $day = ( 31, $uru->($dat[0]) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 30 )[$dat[1] - 1] ;
$dat[2] = $day if $dat[2] == 0 ; $dat[0] -= 1900 ;$dat[1] -= 1 ;
return timelocal reverse @dat ;
}
■ このスレッドは過去ログ倉庫に格納されています