2013-02-26 4 views
1

Perl (v5.14.2)을 사용하여 단일 명령 행 입력 인수로 3D 벡터를 가져 오려고합니다.Perl Getopt :: Long은 배열의 기존 값을 수정하지 않는 것 같습니다.

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 수율이 스크립트를 실행 : I는 초기화되지 않은 @boxSize을 떠날 경우, 지금

Box size: 0 0 0 

:

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"; 

동일한 스크립트가 이제 r eturns :

Box size: 1.0 2.0 3.0 

아무도 내가 뭘 잘못하고 있다고 말할 수 있습니까?

+0

안녕하세요! 우리는 일반적으로 상황을 정리하기 위해 감사 문을 추가하지 않습니다. 당신이 좋은 대답을 upvote하고 최고의 것을 받아들이도록 도와주는 사람들에게 감사드립니다. 우리가 필요로하는 모든 감사가 있습니다 .--). 좋은 첫 번째 질문 btw. –

답변

3

나는 당신이 버그를 발견했다고 말하면서 뭔가를 확인했다 :이 방법을 사용하면 값이 추가된다. @boxSize에 6 개의 값으로 끝납니다.

#!/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";