나는 Perl의 Getopt::Long 모듈을 사용하여 명령 줄 인수를 구문 분석합니다. 그러나 일부 인수가 누락 된 경우에도 true 값을 반환하는 것으로 보입니다. 이것이 사실인지 알 수있는 방법이 있습니까?인수가없는 경우 Perl의 Getopt :: Long을 어떻게 얻을 수 있습니까?
답변
일반적인 오래된 Getopt :: Long에서는 이것을 직접 수행 할 수 없습니다. Jonathan이 말했듯이 undef에 대한 요구 사항을 확인해야합니다. 그러나 IMHO는 이것이 좋은 것입니다 - "필수"매개 변수는 무엇입니까? 종종 하나의 경우에 필요한 매개 변수가 있고 다른 매개 변수는 필요하지 않습니다. 가장 일반적인 예는 --help
옵션의 엄지입니다. 필수는 아니며 사용자가이 매개 변수를 사용하면 다른 "필수"매개 변수를 알지 못하거나 전달하지 않을 것입니다. 심지어 내가 required => 1
내 속성을 설정하지 MooseX :: 것은, Getopt와
use List:MoreUtils 'all';
Getopt::Long::GetOptions(\%options, @opt_spec);
print usage(), exit if $options{help};
die usage() unless all { defined $options{$_} } @required_options;
:
나는 내 코드의 일부 (내가 MooseX::Getopt를 사용으로 전환 될 때까지 아니라, 내가 사용)에서이 관용구를 사용하여 다시 --help
옵션 때문입니다. 대신 프로그램 실행 본문으로 이동하기 전에 필요한 모든 특성이 있는지 확인합니다.
package MyApp::Prog;
use Moose;
with 'MooseX::Getopt';
has foo => (
is => 'ro', isa => 'Str',
documentation => 'Provides the foo for the frobnitz',
);
has bar => (
is => 'ro', isa => 'Int',
documentation => 'Quantity of bar furbles to use when creating the frobnitz',
);
# run just after startup; use to verify system, initialize DB etc.
sub setup
{
my $this = shift;
die "Required option foo!\n" unless $this->foo;
die "Required option bar!\n" unless $this->bar;
# ...
}
옵션은 선택 사항이므로 'Getopt'이름입니다.
Getopt::Long
으로 설정된 옵션 값을 확인하십시오. 중요한 항목 중 하나가 'undef
'이면 놓친 상태이므로 식별 할 수 있습니다.
반환 값은 명령 줄에 끔찍한 실수가 없음을 나타냅니다. 실수를 구성하는 요소는 사용자가 Getopt::Long
을 사용하는 방법에 따라 다르지만 명령 줄에 -o output
이 있지만 명령에서 -o
옵션을 인식하지 못하는 경우가 있습니다.
가끔 옵션이 선택 사항이 아닙니다. – tster
@tster : 동의합니다; 때로는 명령에 몇 가지 특정 옵션이 필요합니다. Getopt 패키지에 그러한 사실을 알릴 수 있으면 좋을 것입니다. 아마도 다른 Getopt 패키지 중 일부가이를 지원할 것입니까? 선택할 수있는 것들이 많이 있습니다 (그리고 저는 제 자신을 굴렸습니다 - 그러나 그것은 필수적인 주장을지지하지 않습니다). 필수 옵션에는 앞에 글자가 필요하지 않아야한다는 주장이 있습니다. 그것들은 위치 적 논증이된다. 그러나 이러한 인수가 여러 개인 경우 위치를 빨리 기억하기가 어려워집니다. –
- 1. Perl의 Getopt :: Long과 함께 -r = <pattern>을 어떻게 처리 할 수 있습니까?
- 2. Perl의 Getopt :: Long을 사용하여 사용자가 입력 한 순서대로 옵션을 얻는 방법?
- 3. Perl의 주어진 인덱스에서 어떻게 문자를 얻을 수 있습니까?
- 4. getopt() 동작이 비정상적인 경우
- 5. Perl의 GetOpt :: Long은 버그를 전환하여 버그를 수용합니까?
- 6. 표현식에서 Perl의 ///를 어떻게 사용할 수 있습니까?
- 7. PHP와 Perl의 성능을 어떻게 비교할 수 있습니까?
- 8. Perl의 a2p 지원을 어떻게 만들 수 있습니까?
- 9. Perl의 객체를 어떻게 조롱 할 수 있습니까?
- 10. 어떻게 CurrentWindow를 얻을 수 있습니까?
- 11. 어떻게 출력을 얻을 수 있습니까?
- 12. 대의원을 어떻게 얻을 수 있습니까?
- 13. 어떻게 얻을 수 있습니까? UI_USER_INTERFACE_IDIOM
- 14. 어떻게 onChangeEvent_sooner_를 얻을 수 있습니까?
- 15. BDE 별칭 만있는 경우 어떻게 Interbase 암호를 얻을 수 있습니까?
- 16. Perl의 URI 모듈을 통해 URL을 필터링하면 무엇을 얻을 수 있습니까?
- 17. long을 int로 변환 할 수 있습니까?
- 18. 조건부 명령 줄 인수 [가능한 경우 getopt() ?? ]
- 19. 런타임에 컨트롤 유형을 어떻게 얻을 수 있습니까?
- 20. 스프라이트의 속도를 어떻게 얻을 수 있습니까?
- 21. CGContext에서 어떻게 색 공간을 얻을 수 있습니까?
- 22. 어떻게 루트 요소의 속성을 얻을 수 있습니까?
- 23. Ruby 클래스의 이름은 어떻게 얻을 수 있습니까?
- 24. 어떻게 DATA를 TIME으로부터 얻을 수 있습니까?
- 25. MySQL에서 n 행마다 어떻게 얻을 수 있습니까?
- 26. iPhone에서 현재 위치의 lat-long을 연속으로 가져올 수 있습니까
- 27. Perl의 getc에 대한 문제를 어떻게 진단 할 수 있습니까?
- 28. 설치된 코덱 목록은 어떻게 얻을 수 있습니까?
- 29. json 결과에서이 값을 어떻게 얻을 수 있습니까?
- 30. 어떻게 상대 경로를 얻을 수 있습니까?
위대한 질문입니다. undef에 대한 값을 검사하는 것 이외의 다른 방법이 있었으면합니다. – tster
Getopt의 문서에서 필요한 옵션을 지정할 수 있음을 암시하는 이유는 이것이 많은 사람들에게 혼란을주는 이유입니다. "값을 취하는 옵션의 경우 옵션 값이 필요한지 여부와 옵션이 기대하는 값의 종류를 지정해야합니다." http://perldoc.perl.org/Getopt/Long.html – lfalin