私たちのコードベースでは、この構造体を頻繁に使用して、プログラムのオプションを処理します。
Readonly my $ARGS => Getopt::Declare->new(
join( "\n",
'[strict]',
"--option1 <some-option-description> [required]",
)
) or exit(1);
問題は、厳密性に違反するGetopt::Declare->new(...)
と が返されることです。これは、ブール値コンテキストで評価されるとtrueであるReadonly変数に格納されるundef
ことを除いて、通常は問題ありません。undef
明白な解決策は、 を削除すること
Readonly
であり、コードは期待どおりに機能します。ただし、これを変更すると変更できるため、このソリューションはあまり好きではありません$ARGS
。my $ARGS => Getopt::Declare->new( join( "\n", '[strict]', "--option1 <some-option-description> [required]", ) ) or exit(1);
別の解決策は、括弧で囲み、 Readonly変数
Getopt::Declare->new(...) or exit(1)
に代入する前に評価されるようにすることです。Readonly my $ARGS => ( Getopt::Declare->new( join( "\n", '[strict]', "--option1 <some-option-description> [required]", ) ) or exit(1); )
代わりに or の優先順位の高いバージョンを使用することもあると思いますが
||
、これはより強力にバインド=>
されますが、それが読みやすいかどうかはわかりません。Readonly my $ARGS => Getopt::Declare->new( join( "\n", '[strict]', "--option1 <some-option-description> [required]", ) ) || exit(1);