%fruit
- это хэш, но значения в хэше - это ССЫЛКИ на массив из двух членов.
Что GetOptions делает, это берет массив (например, %ARGV)
) и анализирует параметры из этого массива. Вы можете поместить эти параметры в скаляры, массивы и даже хэши, но прямого способа сказать, что командная строка опция является ссылкой на массив.
Лучшее, что вы сможете сделать, - это создать массив, который будет содержать эти значения:
$ myprogram --fruit banana=yellow --fruit cherry="dark red" --fruit strawberry=red
Тогда вы можете иметь:
GetOptions('fruit=s' => \@fruitHash);
Массив будет выглядеть так:
$fruit[0] = 'banana=yellow';
$fruit[1] = 'cherry=dark red';
$fruit[2] = 'strawberry=red';
Оттуда вы можете просмотреть массив и создать ссылку на хеш:
my %fruitHash;
my $count = 1;
foreach my $value (@fruit) {
my ($fruit, $color) = split(/=/, $value);
$fruit{$fruit}=>[0] = $count,
$fruit{$fruit)=>[1] = $color,
}
Нет способа заставить GetOptions понимать, что параметры командной строки являются ссылкой на массив из двух элементов.