我创建了一个文件 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年等)?
答案 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)
if ($ARGV[0] =~ m!^((?:19|20)\d\d)) {
$year = $ARGV[0];
}
希望这有帮助。