もしやと思ってちょっと調べてみたら、
CPANにDate::Calcっていうモジュールがあり、
http://search.cpan.org/dist/Date-Calc/Calc.pod

こういう関数を使うと楽らしいが、
($year,$month,$day) = Add_Delta_YM($year,$month,$day, $Dy,$Dm);

1/28〜1/31の一ヵ月後が2/28でいいなら、
ちょこっとif文とかを書き連ねて場合わけしたほうが速そうだ。