同一ファイル内のパッケージのサブルーチンをインポートしてみるテスト。
モジュールの場合
package Foo;
use base qw(Exporter);
our @EXPORT_OK = qw(foo);
sub foo
{
print $_[0];
}
1;
use Foo qw(foo);
foo 'foo';
#foo
とりあえずモジュールをねじ込む
package Foo;
use base qw(Exporter);
our @EXPORT_OK = qw(foo);
sub foo
{
print $_[0];
}
package main;
foo 'foo';
#String found where operator expected at foo.pl line 12, near "foo 'foo'"
# (Do you need to predeclare foo?)
#syntax error at foo.pl line 12, near "foo 'foo'"
#Execution of foo.pl aborted due to compilation errors.
Foo::foo 'foo';
#foo
とりあえずimportしてみる
package Foo;
use base qw(Exporter);
our @EXPORT_OK = qw(foo);
sub foo
{
print $_[0];
}
package main;
BEGIN {import Foo qw(foo)}
foo 'foo';
#"foo" is not exported by the Foo module
#Can't continue after import errors at foo.pl line 11
#BEGIN failed--compilation aborted at foo.pl line 11.
タイミングを前にずらしてみる
package Foo;
use base qw(Exporter);
BEGIN {our @EXPORT_OK = qw(foo)}
sub foo
{
print $_[0];
}
package main;
BEGIN {import Foo qw(foo)}
foo 'foo';
#foo
タイミングを後ろにずらしてみる
package Foo;
use base qw(Exporter);
our @EXPORT_OK = qw(foo);
sub foo
{
print $_[0];
}
package main;
import Foo qw(foo);
foo 'foo';
#String found where operator expected at foo.pl line 13, near "foo 'foo'"
# (Do you need to predeclare foo?)
#syntax error at foo.pl line 13, near "foo 'foo'"
#Execution of foo.pl aborted due to compilation errors.
eval "foo 'foo'";
#foo
宣言してお茶を濁してみる
package Foo;
use base qw(Exporter);
our @EXPORT_OK = qw(foo);
sub foo
{
print $_[0];
}
package main;
sub foo;
import Foo qw(foo);
foo 'foo';
#foo
Exporterのことは忘れてシンボルテーブルに自前でねじ込んでみる
package Foo;
sub import
{
my $pkg = shift @_;
*{caller(0)."::$_"} = \&{$pkg."::$_"} foreach @_;
}
sub foo
{
print $_[0];
}
package main;
BEGIN {import Foo qw(foo)}
foo 'foo';
#foo
There's more than one way to do it!
というか、そもそも前提条件がオカシイという話に対しては全力で耳を塞いで生きていきたい。
ご飯や豆腐・納豆や麺にたっぷりかけて
色々な料理に相性ばっちり!
とかいう謳い文句を完全に無視して酒のアテとして直でつついていたねぎからしが切れた。
結構よかったので見かけたらまた買おう。
相変わらずこの人は、ネギとかシソとか薬味が好きすぎる。