Mixtype

Perlで配列のデータを日付順(更新日順)でソート

Mixtype No.65 Last Update On 2010-01-13 2010 perl

Perlで配列のデータを日付順(更新日順)でソート

Mixtype No.65 Last Update On 2010-01-13 2010 perl
番号順で並べられたログデータを抽出して、それをそのまま並べてRSSフィードを作っているだけでは、あるページを更新した時に、その旨をRSSフィードに載せるには、手動でやるしかないので不便です。
そこで、更新したページのデータをRSSフィードに載せることができるように、番号順で並べられたログデータを「日付順でソート」してみようと製作に取り掛かりました。取り掛かると言ってもどうということでもなくまずは検索。「perl 日付順 ソート」で検索してみたらこちらのサイトが見つかりました。

CGI-Perlの基礎講座p07 - sort関数
@sortdata = sort { (split(/\,/,$a))[2] <=> (split(/\,/,$b))[2] } @hogehoge;

この例文にある[2]は配列の順番で、「aaa,bbb,1,ccc」と言う配列は前から「[0],[1],[2],[3]」と言う値。また、「\,」は配列を区切る文字(この場合は「,」で区切ってある場合。「\」はエスケープ記号)なので、例えば配列が「<>」で区切ってあれば、

@sortdata = sort { (split(/<>/,$a))[2] <=> (split(/<>/,$b))[2] } @hogehoge;

とすると応用が可能です。
それと、この例文では、「日付の遠い順」になってしまうので「$a」と「$b」を入れ替えることで「日付の近い順」にすることができます。注意する点は、日付のフォーマット。これを変えているとおかしくなるので、「year/month/day hour:min:sec」の順番に直しておきましょう。