подпрограмма Perl для получения диапазона дат - PullRequest
3 голосов
/ 11 августа 2011

Могу ли я использовать Perl-подпрограмму, которая бы выполняла следующие действия? Я ищу хороший пример.

Я хочу иметь возможность распечатать список дней на основе диапазона.

В качестве параметра я хочу иметь возможность сделать что-то вроде: ./myperlscript -r 20110630 20110731 (как пример, где -r = диапазон).

Так что, в принципе, если я могу поставить (2) даты в этом формате в качестве входных данных и напечатать меня в те дни.

20110630
20110701
20110702
...
..

1 Ответ

4 голосов
/ 12 августа 2011

Это должно помочь вам начать. Возможно, вы захотите добавить некоторую проверку ввода (т. Е. Убедиться, что элементы @ARGV отформатированы правильно и первое представляет дату, меньшую второго, и т. Д. И т. Д.).

use strict;
use warnings;
use DateTime;

unless(@ARGV==2)
{
    print "Usage: myperlscript first_date last_date\n";
    exit(1);
}

my ($first_date,$last_date)=@ARGV;

my $date=DateTime->new(
{
  year=>substr($first_date,0,4),
  month=>substr($first_date,4,2),
  day=>substr($first_date,6,2)
});


while($date->ymd('') le $last_date)
{
  print $date->ymd('') . "\n";
  $date->add(days=>1);
}

ETA: Если неясно, что происходит, мы создаем $date как DateTime объект, анализируя год, месяц и день, которые были заданы в $first_date. Затем мы продолжаем печатать год, месяц и день без разделителей ($date->ymd('')) и увеличиваем $date на один день, пока не достигнем $last_date.

...