我想調用子程序在Perl一樣:如何使用開關類型參數子程序在Perl
sub temp {
---- some code -----
}
temp(-switchName, value1, --switchName2, value2)
就像我知道的Getopt ::龍是有命令行開關類型參數。 所以我想知道子程序類型的參數。
我想調用子程序在Perl一樣:如何使用開關類型參數子程序在Perl
sub temp {
---- some code -----
}
temp(-switchName, value1, --switchName2, value2)
就像我知道的Getopt ::龍是有命令行開關類型參數。 所以我想知道子程序類型的參數。
有許多原因之一可能要做到這一點,但你沒有說,所以我不得不猜測一些。
命令行上的開關很有用,因爲命令行程序將參數與參數列表混合在一起,需要一些方法來了解其差異。因此,「以......開頭的東西 - 不是常規論據」的慣例。
command --key value --key2 value2 file1 file2 file3
command file1 --key value file2 --key2 value2 file3
你當然可以做一個子程序,在那裏挑選通過其尋找的東西與--
開始,這意味着在列表中的下一個參數列表類似的東西是相關聯的價值......但子程序有更好和更簡單的方法來做到這一點。
temp(["file1", "file2", "file3"], { something => 1 });
在這種情況下的參數的主列表被傳遞在第一作爲數組參考,並且選擇在第二在哈希引用傳遞。沒有歧義。
sub temp {
my($files, $options) = @_;
print "Something!\n" if $options->{something};
for my $file (@$files) {
...do something with $file...
}
}
你甚至可以採取這一步,作爲一個選項傳遞一切。
temp(files => ["file1", "file2", "file3"], something => 1);
sub temp {
my %args = @_;
print "Something!\n" if $args{something};
for my $file (@{$args{files}}) {
...do something with $file...
}
}
這很有用,如果它不是很清楚什麼是選項和什麼是參數。這裏可能有些過分的「帶選項的文件列表」例子。
如果我理解正確,您可以將您的參數傳遞給散列並使用它來訪問它們。這樣的:
sub temp {
my %opts = @_;
if ($opts{'-switch1'}) {
# ... do something ...
}
...
}
temp(-switch1 => 1);
# or
temp(-switch1, 1);
Thakx您的代碼幫助我... :) – 2012-03-23 09:42:56
@ user970553,如果代碼有幫助,請檢查旁邊的「接受」按鈕。這表示「感謝」作者,並幫助下一位讀者看到哪個答案是正確的。 – 2012-03-25 13:29:29
您已接受*無*以前的答案。請糾正這個問題。 – Borodin 2012-03-23 08:21:21
你爲什麼需要那個?對不起,如果這是粗魯的,但我問,因爲原因改變了答案。 – Schwern 2012-03-23 08:53:07
截至撰寫本文時,您已將原始問題編輯爲完全不同的問題,現在答案沒有意義。請回復你的問題,並在另一個問題下發布你的新問題。 – 2012-04-03 02:06:29