« #isucon2 で連覇させてもらってきました | メイン | 運用におけるcrontabのテストとParse::Crontab »

2012年12月24日

ワンライナーでOOなPerlモジュール使うときに、2回もモジュール名を打ち込んでいられるほど人生は長くない件について

ランダムな文字列を求めたい時に以下のようなコマンドを打つことがあるが、String::Randomを2回も打ち込んでいられるほど人生は長くはなかった。

% perl -MString::Random -E 'say String::Random->new->randregex("[0-9a-z-A-Z]{12}")'

なので、Lというモジュールを書いてみた。

https://github.com/Songmu/p5-L

これを使うと上と同様の処理が以下のように書ける。

% perl -ML -E 'say l("String::Random")->new->randregex("[0-9a-zA-Z]{12}")'

ただ、lという関数をかますのがダサい感じなので、

% perl -ML -E 'say String::Random->new->randregex("[0-9a-zA-Z]{12}")'

みたいに書けるとなお良いが如何せんPerl力が足りないので、実現可能かどうかわからないのであった。

autobox + AUTOLOADを使えば以下のように書けるんじゃないかという意見もいただいております。

% perl -ML -E 'say "String::Random"->new->randregex("[0-9a-zA-Z]{12}")'

なんかうまいやり方がないか、Perl Magiciansのご意見をお待ちしております。

追記

tokuhiromがサクッとpullreqってくれて、UNIVERSAL::AUTOLOAD使っていけるようになりました。tokuhirom++すぎる。

% perl -ML -E 'say String::Random->new->randregex("[0-9a-zA-Z]{12}")'

UNIVERSAL::AUTOLOAD定義するとか危なすぎるんで、ワンライナーの使用にとどめましょう。

マジカルなこと必要かとおもいきや、CoreモジュールだけでサクッとかけてしまうあたりPerlマジ黒魔術。

他にも意見くださった、_gfx_、fujiwara、__kan、ありがとうございました。

まだCPANにあげてません。さすがに一文字モジュールをCPANに上げるかどうかは迷いますなー。

2012/12/26 追記

14:04 Songmu: L.pm を CPANize したものか迷う。
14:04 Songmu: https://github.com/Songmu/p5-L
14:04 Songmu: 俺得でしか無いんじゃないか。
14:06 karupanerura: つかいたいです!
14:06 kazeburo: おなじく!
14:12 Songmu: じゃああげちゃいますよ...!
14:15 gfx
: (゚A゚;)ゴクリ
14:15 karupanerura: wktk
14:15 kazeburo_: ++
14:19 typester: -MFoo とかしてたらうしろでクスってされる時代来ちゃう

15:14 Songmu: https://metacpan.org/release/SONGMU/L-0.01/
15:14 Songmu: 上げてしまいました。gkbr
15:15 __kan: ktkr
15:18 bayashi_____: L イイ!

という感じでshipitしましたことをお知らせいたします!ご相談に乗っていただいた皆様ありがとうございました!

投稿者 Songmu : 2012年12月24日 01:45