Ниже приведен полностью рабочий пример.Это может потребовать некоторых настроек для ваших личных предпочтений, таких как то, что вы хотите иметь для входящего сообщения и печати других вещей.Но вы, вероятно, знаете, как это сделать!
Если вы запустите сценарий, он будет ждать ввода в формате YYYY/MM/DD-hh:mm
и сообщит вам, если это между 9:00 и 14:00,
use strict;
use warnings;
use DateTime::Format::Strptime;
chomp ( my $input = <> );
my $strptime = DateTime::Format::Strptime->new(pattern => '%Y/%m/%d-%H:%M');
my $dt_check = $strptime->parse_datetime($input);
my $dt_start = clone_with_time($dt_check, '09:00');
my $dt_stops = clone_with_time($dt_check, '14:00');
my $check = ( $dt_start lt $dt_check and $dt_check lt $dt_stops ) ? "Yay": "Nay";
print "$check\n";
# return a cloned DateTime object, set with the given time
sub clone_with_time {
my ($dt_old, $time) = @_;
my ($hh, $mm) = split /:/, $time;
my $dt_new = $dt_old->clone;
$dt_new->set( hour => $hh, minute => $mm);
return $dt_new
}
Подпрограмма clone_with_time
принимает объект DateDime (тот, который мы получили из ввода) и строку времени в формате hh:mm
.Затем подпрограмма клонирует этот объект и соответственно устанавливает время.
Подпрограммы удобно иметь, если нужно повторить несколько операторов несколько раз, в этом примере, чтобы сгенерировать $dt_start
и $dt_stops
.Он поддерживает основную программу в чистоте и прост в использовании.при кодировании помните DRY .
TIMTOWTDI