模块:./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
我会列出我尝试过的所有东西,但还有很多 - 正如你所看到的,我有比列出的更多的全局 Foobar 全局变量。我已经删除了 BEGIN 并按照 PerlMonks 上 [older] 帖子中的建议做了一些其他的事情。
我想我曾经在某处读过,如果包名称与模块名称相同,则默认情况下,Exporter 会以某种方式工作。我不知道将模块放在子目录中是否会改变这种行为(?)。但是,我很想看看我是怎么搞砸的。