2010-05-28 90 views
3

我正試圖管理用戶執行命令時指定的衆多參數。到目前爲止,我一直在試圖限制我的腳本設計管理​​論據,我可以輕鬆地與管理的Getopt ::旗龍如下:如何管理用Perl編寫的腳本的命令行參數/變量?

GetOptions ("a" => \$a, "b" => \$b); 

這樣我可以檢查,看看是否a或b分別爲指定並執行相應的代碼/函數。

不過,我現在已經在這裏用戶可以指定兩個參數變量的情況下,如下所示:

command -a black -b white 

這是好的,但我不能想出一個好辦法,以確定是否-a或-b首先被指定。因此我不知道執行GetOptions ("a" => \$a, "b" => \$b);之後,參數變量是分配給$ARGV[0]還是$ARGV[1]

如何判斷哪個變量與-a關聯,哪個與上述示例中的-b關聯?

+0

重複:http://stackoverflow.com/questions/361752/how-can-i-pass-command-line-arguments-to-a-perl-program – lexu 2010-05-28 04:46:23

+0

我以爲GetOptions從ARGV中刪除了條目'。 – 2010-05-28 05:12:16

+7

Nitpick:即使在例子中,你也不應該使用'$ a'和'$ b'作爲變量;那些是Perl自己的。 – 2010-05-28 05:13:24

回答

6

的Getopt支持參數​​選項,這樣你就可以說,例如:

GetOptions('a=s' => \$a, 'b=s' => \$); 
print "a is $a and b is $b"; 

在命令行中你的問題打印:

a is black and b is white 

manual page爲噸以上的選項。這是一個非常強大的模塊。

2
my $a = ''; # option variable with default value (false) 
my $b = ''; # option variable with default value (false) 

GetOptions ('a' => \$a, 'b' => \$b); 

print "a is $a and b is $b\n 

請仔細閱讀Getopt::Long的perl文檔。從這個文檔。

到GetOptions()的調用解析 命令行參數 存在於@ARGV並設置選項 變量設置爲值1,如果選項 並在命令行上發生。 否則,觸摸的選項變量不是 。將選項值設置爲 true通常稱爲啓用 選項。

指定給 GetOptions()函數的選項名稱被稱爲 選項規範。稍後我們將看到 該規範可以包含 而不僅僅是選項名稱。對變量的引用 被稱爲 選項目標。

如果可以成功處理命令行 ,GetOptions()將返回真值 。否則,它將向STDERR寫入 錯誤消息,並返回 錯誤結果。

另外this也可以幫助你。