useすると関数が増える話

前回に引き続き、useして関数を増やしてみようと思います。
つまり、Exporterがやってくれるアレです。

こんな感じで、ファイルを配置します。

.
├── Bar.pm
└── aaa.pl

“Bar.pm”はこんな感じ。

package Bar;
use strict;
use warnings;
use v5.10;

sub import {
    my $klass = shift;
    my $caller = caller( 0 );
    say '$caller is ', $caller;

    {
        no strict 'refs';
        *{"${caller}::bar"} = sub {
            say $caller, '::bar called!';
        };
    }
}

1;

“aaa.pl”はこんな感じ。

use strict;
use warnings;
use v5.10;

BEGIN {
    use FindBin;
    use lib $FindBin::Bin;
}
 
use Bar;

bar();
say 'bye!';

実行結果はこんな感じ。
$ perl aaa.pl
$caller is main
main::bar called!
bye!

Exporterの実装がちょっとだけ、分かった気がします。

おしまい。

Leave a Comment