Незначительные отклонения при первом ответе с использованием sprintf вместо ceil и POSIX.Также не используются никакие дополнительные модули CPAN.Это округляется вверх или вниз, поэтому 6:07 = 6:00, 6:08 = 6:15, 6:22 = 6:15 и 6:23 = 6:30.Обратите внимание, что час добавляется, если округленные минуты равны 60. Однако, чтобы сделать это правильно, вам нужно будет использовать функции timelocal и localtime для добавления часа.т.е. добавление часа может добавить день, месяц или год.
#!/usr/bin/perl
my ($hr,$min) = split/:/,$time;
my $interimval = ($min/15);
my $rounded_min = sprintf "%.0f", $interimval;
$rounded_min = $rounded_min * 15;
if($rounded_min == 60)
{
$rounded_min = 0;
$hr++;
$hr = 0 if($hr == 24);
}