昔は、Time::Localを使用して時間をエポックからの秒数に変換し、10 日間の秒数 (10 * 24 * 60 * 60) を引き、それを元の時間に変換していました。localtimeを使用した時間。それは楽しく、教育的であり、ほとんどの場合、過度に複雑でエラーが発生しやすいものでした.
Perl 5.10 以降を使用できる場合は、Time::Pieceを使用することを好みます。これにより物事が単純になり、最も重要なのは、標準の Perl モジュールだからです。さらに、別の標準 Perl モジュールであるTime::Secondsとうまく連携します。
use warnings;
use strict;
use autodie;
use feature qw(say);
use Time::Piece;
use Time::Seconds;
my $date = "25-jan-2013";
#Create the "date object". The `%d-%b-%Y" is format the date is in
my $my_date = Time::Piece->strptime($date, "%d-%b-%Y"); #
#Now subtract ten days from it
$my_date -= ( 10 * ONE_DAY ); #Constant from Time::Seconds
say $my_date; #Prints out Tue Jan 15 00:00:00 2013
#Printing it out in dd-mmm-yyyy format you had
say $my_date->mday . "-" . $my_date->monname . "-" . $my_date->year;