如何在Perl中将参数标识为一年?

时间:2010-03-29 10:27:15

标签: perl date

我创建了一个文件 argument.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 个答案:

答案 0 :(得分:3)

@OP,因为您正在使用Date :: Calc,查看文档,您可能想尝试使用某些函数,例如check_date(),例如

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

如果您的年份不正确,该功能应该会给您一个错误。

答案 1 :(得分:3)

我建议放弃位置参数并使用命令行参数处理库,例如Getopt::Long,以便可以将您的程序调用为

$ argument.pl -y 2013 -d 23 -t type

答案 2 :(得分:2)

您可以尝试以下操作以确保第一个参数的格式为19xx或20xx。

if ($ARGV[0] =~/^(19|20)\d{2}$/) {
 $Year = $ARGV[0];
}

答案 3 :(得分:1)

对定义的和4位数格式的简单测试:

$Year = $ARGV[0] if defined $ARGV[0] && $ARGV[0] =~ /^\d{4}$/);

答案 4 :(得分:0)

试试看,年份是20 **或19 **

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

希望这有帮助。