2010-12-10 44 views
-3

當我使用命令行輸入運行Perl文件時,它應該更新表中的一個字段。如何用Perl解析簡單的命令行選項?

例如

perl function_impl.pl --address_only 
如果它接收的輸入參數 --address_only則t應該更新在是Perl script.How的分貝唯一地址字段來實現此

+3

什麼你到目前爲止嘗試過嗎?哪部分給你帶來麻煩?命令行選項?數據庫更新? – DVK 2010-12-10 11:54:38

+1

另外,您將如何提供更新值? – DVK 2010-12-10 12:01:49

+2

另外,在人們爲你回答的2個問題中,你甚至沒有贊成或接受一個答案。保持這一點,人們不會急於回答你的問題。 – DVK 2010-12-10 12:03:58

回答

-4

如果你的腳本接受零個或一個參數,你可以這樣做:

if($#ARGV == 0) {  # one argument passed 
     if($ARGV[0] eq '--address_only') { 
       # --address_only passed 
     } else { 
       # something else passed 
     } 
}elsif($#ARGV == -1) { # no argument passed 

}else{     # more than one arg passed 

} 
+2

'@ ARGV'手動解析根本無法擴展。用於選項解析的CPAN模塊(Getopt :: Std或Getopt :: Long)應始終用於提供可伸縮性(不必介意可讀性)。 – Aye 2010-12-10 13:16:08

+1

爲什麼在你真正想要參數的數量時檢查'$#ARGV'?這在'@ ARGV'中可用,沒有錯誤的問題。 – Ether 2010-12-10 17:35:45

11

Getopt::Long是Perl中的一個非常普遍的和非常簡單的方法來解析命令行參數。

my %args =(); 
GetOptions (\%args, 'address_only');  # will store true value in $args{address_only} 

if ($args{address_only}) { 
    # Update address 
} 

請向我們展示您用於更新表格的代碼,以便我們可以在需要時提供該部分的幫助。

另外,您將如何提供更新值?從你的例子你不會通過命令行來提供它,所以我認爲它是硬編碼的?如果你想在命令行中提供,更改上面的代碼接受值的參數:

my %args =(); 
GetOptions (\%args, 'address_only=s'); # will store address value in $args{address_only} 
# Usage: function_impl.pl --address_only [email protected] 

作爲一個簡單的例子,你可以建立「SET」 UPDATE語句的一部分: