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}
私は何をするときでも、私のオプションのハッシュで終わるためにこれらの2つの方法を組み合わせているやろうとしている彼ら複数の値を持つ
例として、誕生日(3つの整数)、親(1つまたは2つの文字列)、名(ちょうど1つの文字列)の3つのオプションを許可したいとします。 これらの値をハッシュに入れたいとしましょう。
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
という2つの機能を組み合わせることはできません。つまり、オプションをハッシュに入れ、繰り返し指定子を使用しますか?
私は配列として 'bday'を望んでいましたが、確かに。私は '@ {}'表記が必要です。ありがとう! –