use strict; use warnings; use POSIX qw(strftime); my $hr = (localtime)[2]; my $minus = $hr < 10 ? 36000 : 0; my $dir = strftime("/something/something/%Y/%m/%d", localtime(time - $minus));