Getopt::Longの pass_throughオプションに関するメモ
おそらくはそれさえも平凡な日々: 2013年のGetopt::Long
でも紹介されている pass_throughに関するメモ。
pass_throughオプションを有効にするとオプション解析の終了を意味する
'--'が @ARGVに含まれます。
以下のようなコードの場合、
#!perl use strict; use warnings; use Getopt::Long; Getopt::Long::Configure( 'pass_through', ); local @ARGV = qw/-D=usethreads -D=use64bitint -- 5.16.2/; my (@D); Getopt::Long::GetOptions( 'D=s@' => \@D, ); print "\@D=(@D)\n"; my $version = shift; print $version, "\n";
結果は以下のようになってしまいます。
% perl test.pl @D=(usethreads use64bitint) -- # <= 意図しない
plenv, Perl::Buildで考慮されていなくて pull requestしたの
ですが、ベストな解決方法がわからなかったので以下のコードを
GetOptionsのあとに追加しました
shift @ARGV if @ARGV >= 1 && $ARGV[0] eq '--';
Getoptionsのオプションを設定するときはドキュメントをちゃんと
読んで使わないとハマりどころが多いなぁと思いました。人様の設定を
参考になんとなくオプションを設定していましたが、以後気をつけます。