今日出会った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 メソッド → 警告を出さない
という違いがあります。