モジュール:./FOO/BAR/Foobar.pm
use strict;
use warnings;
package Foobar;
our($VERSION , @ISA , @EXPORT , @EXPORT_OK , %EXPORT_TAGS , $FOO);
BEGIN {
require Exporter;
@ISA = qw(Exporter);
@EXPORT_OK = qw(&foo);
}
sub foo {
print "Loaded\n";
$FOO = q{some val};
}
1;
プログラム:./Caller.pl
#!/usr/bin/perl
use strict;
use warnings;
use FOO::BAR::Foobar qw/foo/;
Foobar::foo(); # works
foo(); # errors out - can't find &main::foo
私が試したことをすべてリストしますが、たくさんあります。BEGIN を削除し、PerlMonks の [古い] 投稿で提案されているように、他のいくつかのことを行いました。
パッケージ名がモジュール名と同じ名前である場合、エクスポーターはデフォルトで特定の方法で動作することをどこかで読んだことがあると思います。モジュールをサブディレクトリに置くと、その動作が変わる可能性があるかどうかはわかりません(?)。しかし、私は私がどのように失敗したかを知りたがっています。