1ヶ月前が 30 日か 31 日かがわからないので、epoch から秒数を引く方法でなく use POSIX qw(mktime); @now = (localtime)[4,5]; $now[0] -= 1; @last = (localtime(mktime(0,0,0,1,@now)))[5,4]; $last[0] += 1900; $last[1] += 1; print join " ", @last; ってなかんじで。 Time::Local モジュールの timelocal 関数だと、 -1 月や、30 日までしかない月の 31 日指定はエラーになるので、 POSIX モジュールの mktime を使う。 -1 も指定可能