If by day, the OP means 24 hours, that's fine. If he just wants to move back the date one day without changing the time, your solution is wrong since not every day has 24*60*60 seconds. Use timegm+gmtime to do date manips.
use POSIX qw( strftime );
use Time::Local qw( timegm );
my ($d,$m,$y) = (localtime())[3,4,5];
print(strftime("%Y_%m_%d\n",
gmtime(timegm(0,0,0,$d,$m,$y) - 24*60*60)
));
With time:
use POSIX qw( strftime );
use Time::Local qw( timegm );
my ($sec,$min,$hour,$d,$m,$y) = localtime();
($d,$m,$y) = (gmtime(timegm(0,0,0,$d,$m,$y) - 24*60*60))[3,4,5];
print(strftime("%Y_%m_%d_%H_%M_%S\n", $sec,$min,$hour,$d,$m,$y));