Perlの適当モジュール解説シリーズ、久々の第2弾はPerlで日時を加工する時にはきっと役に立つTime::Formatモジュールです。
たとえば、1日に1回だったり週に1回だったり走らせるプログラムがあるとします。んでそのプログラムで出力する処理結果なり、そのプログラムを使って落としてきたファイルなりを格納する場合、処理日付の名前のディレクトリを作成してそこに格納する、ということになります。
通常だとこれをやる場合

  1. localtime()で日付を取得、配列に格納

  2. 日付部分を取り出し、文字列に結合


という風にやるわけですが、やれ桁そろえだゼロサプライだとやるといささか骨です。sprintfを使えば幾分かは楽にできますが、あまり直感的でないのも事実。

そこで登場するのが(ってなんか深夜の通販番組みたいだな)Time::Formatモジュールです。
たとえば、現在の年月日を6桁(2005年8月15日なら050815、1985年10月21日なら851021)で得る場合は

use Time::Format;
$date=time_format('yymmdd');

これだけでOK。日付だけじゃなく日時、秒単位まで欲しい場合は

use Time::Format;
$date=time_format('yymmddhhmmss');

とこうするだけでOK。つまり、time_format()の引数に、フォーマット文字列を渡すだけです。

ここで1つ気づかれるかもしれませんが、月も時も両方ともmmであらわされます。mm(ないしm、?m)が出てきた場合、モジュール側でどちら側をあらわすのか前後を見て適切に判断してくれるようです。ただ当然ながら単体で使うと判断ができないため、そういう場合は

  • 月をあらわすなら{on}をつける

  • 時をあらわすなら{in}をつける


こうすると、きちんと月として(あるいは時として)解釈してくれます。

詳しい解説はCPANの掲載ページを見てもらうと載ってます。全てのフォーマット文字、time_format以外の関数、変数を通した使い方(こっちの方がメインっぽい気もします)なども掲載されています。