2013-02-26 3 views
1

Я пытаюсь захватить 3D-вектор как один входной аргумент командной строки, используя Perl (v5.14.2).Perl Getopt :: Long, похоже, не изменяет существующие значения в массиве

После прохождения Getopt::Long documentation, я решил начать с этого:

use Getopt::Long; 
my @boxSize = (0, 0, 0); 

GetOptions('box:f{3}' => \@boxSize); 

print "Box size: $boxSize[0], $boxSize[1], $boxSize[2]\n"; 

Запуск этого сценария с аргументами -box 1.0 2.0 3.0 Урожайность:

Box size: 0 0 0 

Теперь, если я оставлю @boxSize неинициализированный:

use Getopt::Long; 
my @boxSize; #= (0, 0, 0); 

GetOptions('box:f{3}' => \@boxSize); 

print "Box size: $boxSize[0], $boxSize[1], $boxSize[2]\n"; 

Тот же самый скрипт сейчас r eturns:

Box size: 1.0 2.0 3.0 

Может ли кто-нибудь сказать мне, что я делаю неправильно?

+0

Добро пожаловать в SO! Обычно мы не добавляем заявление благодарности, чтобы держать вещи незагроможденными. Чтобы поблагодарить людей, которые помогут вам быть уверенными в том, чтобы поддержать хорошие ответы и принять лучшее. Спасибо всем, что нам нужно :-). Хороший первый вопрос кстати. –

ответ

3

Я собирался сказать, что вы обнаружили ошибку, а затем я кое-что проверил: оказывается, что при использовании этого способа значения добавляются. Вы получаете 6 значений в @boxSize.

#!/usr/bin/env perl 

use strict; 
use warnings; 

use Getopt::Long; 
my @boxSize = (0, 0, 0); 

GetOptions('box:f{3}' => \@boxSize); 

print "Box size: @boxSize\n"; 

Функция используется помечается как экспериментальной

Внимание: Ниже экспериментальная функция.

, но, возможно, это все равно следует считать ошибкой, учитывая, что вы указываете три значения.

В то же время простым способом было бы проверить, были ли добавлены значения и если вы не используете свои значения по умолчанию.

#!/usr/bin/env perl 

use strict; 
use warnings; 

use Getopt::Long; 
my @boxSize; 

GetOptions('box:f{3}' => \@boxSize); 
@boxSize = (0, 0, 0) unless @boxSize; 

print "Box size: @boxSize\n"; 
Смежные вопросы