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