Как я могу определить аргумент как год в Perl? - PullRequest
0 голосов
/ 29 марта 2010

Я создал файл arguments.pl , который принимает несколько аргументов, первый из которых должен быть в форме года. Например: 2010 23 type. Здесь 2010 год

мой код выглядит примерно так:

use strict;
use warning
use Date::Calc qw(:all);
my ($startyear, $startmonth, $startday) = Today();
my $weekofyear = (Week_of_Year ($startyear,$startmonth,$startday))[0];
my $Year = $startyear;
...
...

if ($ARGV[0])
{
$Year = $ARGV[0];
}

Здесь этот код заполняет $Year "текущим годом", если $ARGV[0] равно нулю или не существует. Что я использую здесь вместо if ($ARGV[0])?

Можно ли проверить, что значение в $ARGV[0] является действительным годом (например, 2010, 1976, 1999 и т. Д.)?

Ответы [ 5 ]

3 голосов
/ 29 марта 2010

Я бы порекомендовал исключить позиционные аргументы и использовать библиотеку обработки аргументов командной строки, такую ​​как Getopt :: Long , чтобы ваша программа могла называться

$ argument.pl -y 2013 -d 23 -t type
3 голосов
/ 29 марта 2010

@ OP, так как вы используете Date :: Calc, просматривая документацию, вы можете попробовать использовать некоторые функции, такие как check_date() например

check_date
      if (check_date($year,$month,$day))

Если ваш год неверен, функция выдаст ошибку.

2 голосов
/ 29 марта 2010

Вы можете попробовать следующее, чтобы убедиться, что первый аргумент имеет формат 19xx или 20xx.

if ($ARGV[0] =~/^(19|20)\d{2}$/) {
 $Year = $ARGV[0];
}
1 голос
/ 29 марта 2010

Простой тест для определенного и четырехзначного формата:

$Year = $ARGV[0] if defined $ARGV[0] && $ARGV[0] =~ /^\d{4}$/);
0 голосов
/ 29 марта 2010

Попробуйте, найдите год 20 ** или 19 **

if ($ARGV[0] =~ m!^((?:19|20)\d\d)) {
$year = $ARGV[0];
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...