MouseX::Getoptのメモ
一文字のオプションと長いオプションを指定したいということが
あるかと思うのですが、MouseX::Getoptでどうやるんだろってことで
実際にコードを書いて調べてみました。まあ hasを 2つ作ればいいの
かなとか考えたんですけど、Getopt::Longと一緒でよくないかなと
思って書いてみたら、それでいいようです。
とりあえずこのようなコードを書きます。
(追記 traitsを使うよう修正しました)
#!/usr/bin/env perl package Sample; use Mouse; with 'MouseX::Getopt'; has 'long' => ( traits => ['Getopt'], is => 'rw', isa => 'Str', required => 1, cmd_aliases => 'l', documentation => 'long or l', ); __PACKAGE__->meta->make_immutable; no Mouse; package main; my $app = Sample->new_with_options();
それでこれをオプションなしで起動するとエラーとなるはずなので
そのときの出力メッセージを見ます。
Required option missing: long usage: moosex_getopt.pl [-?l] [long options...] -? --usage --help Prints this usage information. -l --long long or l
期待通り -lと --longが定義されていますね。割とよく使いそうだから
perldocにサンプルであってもいいかなって思うんですけどね。これぐらい
常識だよ、ってことなんでしょうか。
追記
コードを全面的に修正しました。id:gfxさんのコメント通り、traitsを
使うのが正攻法です。コードを見たところ'|'でつないでうまくいくのは
たまたまです。'|'でつなぐ方法だと、値の参照・設定時に予期せぬ自体に
なってしまったので、traitsを使いましょう。