Perl的Getopt::Long
允許開發人員將其自己的選項添加到腳本中。如正則表達式中所示,也可以通過use of a repeat specifier允許多個值作爲選項。例如:在散列中添加Getopt :: Long選項,即使使用重複說明符
GetOptions('coordinates=f{2}' => \@coor, 'rgbcolor=i{3}' => \@color);
此外,option values can be stored in a hash,就像這樣:
my %h =();
GetOptions(\%h, 'length=i'); # will store in $h{length}
我想要做的是,結合這兩種方法與我的選擇哈希結束了,即使他們有多個值。例如,我想要允許三個選項:生日(三個整數),父母(一個或兩個字符串),名字(正好一個字符串)。 我們還要說,我想把這些值放到哈希中。我試過如下:
use strict;
use warnings;
use Getopt::Long;
use Data::Dumper;
my %h =();
GetOptions(\%h, 'bday=i{3}', 'parents=s{1,2}', 'name=s{1}');
print Dumper(\%h);
而且測試,但輸出如下:
perl optstest.pl --bday 22 3 1986 --parents john mary --name ellen
$VAR1 = {
'name' => 'ellen',
'parents' => 'mary',
'bday' => 1986
};
只有每個選項的最後一個值在哈希實際使用。我想什麼,雖然是:
$VAR1 = {
'name' => 'ellen',
'parents' => ['mary', 'john'],
'bday' => [22, 3, 1986]
};
如果「艾倫」將是一個數組,或者如果一切是一個哈希裏,我不會有事的爲好。
是不可能將Getopt::Long
這兩個功能組合起來,即將選項放入散列中並使用重複說明符?
我想'bday'作爲一個數組,但的確如此。我需要'@ {}'表示法。謝謝! –