useするとimportが呼ばれる話
いつぞやのHokkaido.pm Casualで聞いた気がしますが、
改めて確認してみようと思います。
こんな感じで、ファイルを配置します。
. ├── Foo.pm └── aaa.pl
“Foo.pm”はこんな感じ。
package Foo;
use strict;
use warnings;
use v5.10;
sub import {
my $klass = shift;
say $klass, '::import called!';
{
no strict 'refs';
*{"${klass}::foo"} = sub {
say $klass, '::foo called!';
};
}
}
1;
“aaa.pl”はこんな感じ。
use strict;
use warnings;
use v5.10;
BEGIN {
use FindBin;
use lib $FindBin::Bin;
}
use Foo;
Foo::foo();
say 'bye!';
実行結果はこんな感じ。
$ perl aaa.pl
Foo::import called!
Foo::foo called!
bye!
useすると、sub import {...}が呼ばれて、
その中でFoo::fooを定義して、それをコールしています。
あれあれ、もしや、Exporterがやってることって・・・!?
“Exporter.pm”を見てみると案の定・・・。
おしまい。
Leave a Comment