私たちのコードベースでは、この構造体を頻繁に使用して、プログラムのオプションを処理します。
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);