バージョンあげまくってしまった... orz すみませんm(__)m。
結構テストは書いてたつもりなんですが、基本的な機能のテストが甘かったっていう。ぼけぼけな感じ。
0.08 - 0.12までで、変わったところを列挙します。
継承できるモジュールにSub::Exporterを追加しました(0.08)
でも、Util::Anyと一緒に使うのはあんまりおすすめしませんが。
と言うか,継承の実装はいらんかった気がするんだよなぁ...。今更だけど。
種類を指定するのに、-list, -scalar みたいに、- を推奨するようにしました(0.08)
推奨というか、ドキュメントの例はそうしたってだけなんですが。
前から指定はできたのですが、Sub::Exporterにインスパイヤされて。
ただ、これをつけると、preifx => 1 オプションが死んでたので、直しました(0.09)
種類のprefixを自分で指定できるようになりました(0.08)
Sub::Exporterインスパイヤその2
use Util::Any -list => {-prefix => "array_"};
-list => ['uniq'] が動かなくなってた(0.08)ので直した(0.12)
同じ種類に複数のモジュールがあるパターンで死ぬようになってました。
関数ごとのrenameができるようになりました(0.08)
Sub::Exporterインスパイヤその3
use Util::Any -list => {uniq => {-as => "array_uniq"}};
が、バグることがあったので直しました(0.12)。1個上のバグを踏んだ場合に死んだ模様。
smart_rename というのを追加しました(0.10)
prefix => 1だと、関数名に種類が入っている場合に気持ち悪いとか、
is_/has_ 系の関数の前に、prefixがつくのは気持ち悪いので、つけました。
use Util::All -utf8, {smart_rename => 1};
prefix => 1 だと、utf8_is_utf8 になるところが、is_utf8 だけになります。upgrade は、utf8_upgradeになります。smart_rename のロジックは、自分のモジュール作るときに気にくわなければ,オーバーライドできます。
Sub::Exporter の関数ジェネレータをできるようにしました(0.08だけど、ドキュメントとテスト書いたのは0.12)
Sub::Exporterインスパイヤその4。
既存の関数を元に関数ジェネレータを通して,新たな関数をさくっと作り出すみたいな機能があります。
下記、例が微妙に悪い気がしますが...。例が悪かった。ハッシュリファレンスじゃなくて、アレイリファレンスがよいです。アレイリファレンスじゃないと、同じ min に対して、複数のカスタマイズができない。
package main; use strict; use lib qw(lib t/lib); # 訂正前のもの: use Hoge -test => {min => {-as => "min_under_20", under => 20}}; use Hoge -test => [ min => {-as => "min_under_20", under => 20}, min => {-as => "min_under_5", under => 5}, ]; min_under_20(100,25,30); # 20 min_under_20(100,10,30); # 10 min_under_5(100,25,30); # 5 min_under_5(100,1,30); # 1
min に、-as => ”importする関数名" として、使います。残りの値(under => 20)は、
定義側(下)で、minに与えたコードリファレンスに渡されます。
package Hoge; use strict; use Util::Any -Base; our $Utils = { -test => [[ 'List::Util', '', { min => \&build_min_reformatter} ]] }; sub build_min_reformatter { # $class は List::Util # $name は min # $option には、{under => 20} my ($pkg, $class, $name, $option) = @_; no strict 'refs'; my $code = do { no strict 'refs'; \&{$class . '::' . $name}}; sub { my @args = @_; $code->(@args, $option->{under}); } } 1;
こうすることで、build_min_reformatter が返すコードリファレンスが、-as で指定された名前に割り当てられます。