2010-03-29 35 views
0

我已經創建了一個文件argument.pl這需要幾個參數,其中第一個應該是一年的形式例如:2010 23 type。這裏是2010年如何在Perl中將參數識別爲一年?

我的代碼確實是這樣的:

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等)?

+6

有沒有好的答案。除0之外的任何整數都是格里曆/ Julian日曆中的有效年份。你可能想要的是知道當年是否在一定範圍內。 – 2010-03-29 10:43:12

+0

爲了提供良好的檢查,您需要添加一些特定於域的信息。哪個年份範圍對您的問題有效?它是否必須在某個日曆中,或者您是否希望允許希伯來語,穆斯林或中國日曆。也就是說,有效的一年正是你所說的。 – 2010-03-29 20:37:44

回答

1

爲定義的煩躁和4位數字的格式簡單的測試:

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

但這通過任何4位數字。 – ghostdog74 2010-03-29 11:39:35

+0

任何四位數字是有效年份。所以有1,2,3,5,6,7和8位數字。有些日曆比格里高利或朱利安的日曆稍舊。 :) – 2010-03-29 20:20:35

2

您可以嘗試以下操作以確保第一個參數的格式爲19xx或20xx。

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

在y2k之後不久,我們就忘記了我們所學到的一切。 – 2010-03-29 20:21:43

0

試試看,找年是20 **或** 19

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

希望這可以幫助。

+1

這對大憲章沒有好處。 :( – 2010-03-29 20:36:06

+1

或者僅僅使用2位數字作爲當年的最後2位數字,哪裏會出錯? – DVK 2010-03-30 08:11:35

3

@OP,因爲你正在使用日期::計算器,看文件,你可能需要使用一些功能,如check_date()

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

如果你一年不正確,嘗試函數應該會給你一個錯誤。

+0

在這種情況下用戶只會輸入一年,請您詳細說明一下如何使用上述方法?如: if( check_date($ year)).........給出了一個錯誤,雖然 – dexter 2010-03-30 05:22:42

+0

如果你只想檢查一年,一種方法是給'$ month'和'$ day'一個固定值。請檢查該文件,看看是否有選擇只檢查一年。 – ghostdog74 2010-03-30 05:31:48

3

我會建議開溝位置參數和使用命令行參數處理庫,如Getopt::Long讓你的程序可以被稱爲

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