みなさんこんにちは。akiymです。
2012年に初めてリリースされたモジュールの中で思わず「なにこれ」と言ってしまうモジュールを独自の判断で選定しました。残念ながらこの記事はあなたの役に立たないものとなっています。
https://metacpan.org/module/thanks
ありがとうの感謝の気持ちを伝えるモジュールかと思いきや、 no thanks するために生まれたモジュール。
以下のコードのように同じスクリプト内で宣言されたパッケージをuseすると Can't locate Foo.pm in @INC と怒られますね。
これを可能にするのがthanksです。ちゃんとuseできるようになり、->importも呼ばれるようになっています。
package Foo; # no thanks; sub new { ... } package main; use Foo;
このモジュールの作者はTOBYINK。ひときわ目立つモジュールをリリースし続けています。ぜひともチェックしておきたいですね。
https://metacpan.org/module/Keyword::Simple
自分で新しいキーワードを追加することができるようになります。
以下のコードはifと同じ機能を持つoopsキーワードを追加します。
BEGIN { use Keyword::Simple; Keyword::Simple::define 'oops' => sub { my ($ref) = @_; substr($$ref, 0, 0) = 'if'; }; } oops (1) { ... }
https://metacpan.org/module/Perl::RunEND
付属のperl-run-endコマンドで__END__以降のコードが実行されるようになります。
https://metacpan.org/module/JSONY
JSONをYAMLっぽく書けるようにしたもので、Pegexで実装されています。
plugin Server { host example.com port 8080 } dsn "dbi:SQLite:filename=my.db" allow hosts [ jules sherlock kitty ]
JSONに変換するとこんな感じ。
[ "plugin", "Server", { "host": "example.com", "port": 8080 }, "dsn", "dbi:SQLite:filename=my.db", "allow", "hosts", [ "jules", "sherlock", "kitty" ] ]
DJSONというものもあります。JSONYをちょっとシンプルにした感じです。
ある人はMooseの重さに耐え切れなくなってMouseを作り、またある人はMouseよりも軽いものを求めてMooを作りました。
その光景を見た人(特にINGY)は悪ノリを始め、Mo、Mを作ったそうな。そしてついにMousse、Moosまで登場する始末。
モジュール | 解説 |
---|---|
Moose | 重い。依存モジュールが多く、モジュールのロードに時間がかかる。元祖。 |
Mouse | 軽い。Mooseとほぼ互換性がある。 |
Moo | 海外では割と好まれているようで、現在Mooに依存しているCPANモジュールは170近くある。 |
Mo | MooからRoleを削って、よりシンプルに。 |
M | 非常に高速。しかし、何も機能がないためすべて自分で実装する必要がある。 |
Mousse | チョコレートムースのように見えて、中身はMouseそのもの。Module::Installのプラグインとなっており、依存なしにMouseの機能を使うことができるようになる。 |
Moos | モジュールに依存せず、ある程度のMooseの機能を実装したもの。perl -Moos すると… |
いかがでしたか?本当はもっと解説するつもりでしたが、時間が足りませんでした :)
明日は mattn さんです。お楽しみに。