今日出会ったCPANモジュール

これ何気に便利かも。
今までモジュールをインポートしたクラスにメソッドをインストールするには, import メソッドの中とかで以下の用に書くのが(自分の中では)常套手段でした。

no strict 'refs';
*{$PackageName.'::'.$subname} = $sub_ref;

しかし,このモジュールを使えばこれを以下のようにスマートに書けます。
例としては悪いですけど...

#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Encode;
use Perl6::Say;

package Foo;

use Sub::Installer;

sub install {
    # 呼び出し元クラスに,hello という名前のサブルーチンをインストール
    caller()->install_sub({ hello => sub { print "hello\n" } });
}

package main;

Foo::install();

hello(); # "hello" と表示される


ちなみにこのモジュールには,上記の install_sub というメソッドの他に,reinstall_sub というメソッドもあります。
違いはメソッドがインストールされるクラスの中に,同名のメソッドがあった場合に,
install_sub メソッド → 警告を出す
reinstall_sub メソッド → 警告を出さない
という違いがあります。