Perlのモジュールでモジュール名とかを省略する
なんかたまに
use Sample::Test1 qw(test1 test2);
こんな感じの記述があるソースをperlで見かけるけどなんでか」わからないのでちょっと調べた
エクスポートしているとのこと
よくわからないので実装サンプルを作ってみた。
いままで
sample.pl
#!/usr/bin/env perl use strict; use warnings; use Sample::Test1; my $result; $result = Sample::Test1::test1(); print $result . "\n"; $result = Sample::Test1::test2(200); print $result . "\n";
lib
package Sample::Test1; sub test1{ return "Sample-Test1_test1()"; } sub test2{ my ($aaa) = @_; return $aaa * 100; } # おまじないらしい 1;
今回のもの(モジュール名を省略)
#!/usr/bin/env perl use strict; use warnings; use Sample::Test1 qw(test1 test2); my $result; $result = test1(); print $result . "\n"; $result = test2(200); print $result . "\n";
モジュールにパッケージを指定(Exporterを定義して設定)
package Sample::Test1; BEGIN{ use Exporter; @ISA = qw(Exporter); @EXPORT_OK = qw(test1 test2); } sub test1{ return "Sample-Test1_test1()"; } sub test2{ my ($aaa) = @_; return $aaa * 100; } # おまじないらしい 1;
※「@EXPORT_OK」に指定するといける
これでおkらしい