模块: ./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;
Run Code Online (Sandbox Code Playgroud)
程序: ./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
Run Code Online (Sandbox Code Playgroud)
我列出了我尝试过的所有东西,但是有很多东西 - 正如你所看到的,我有更多的全球Foobar全局变量而不是列出的全局变量.我删除了BEGIN并完成了PerlMonks上[较旧]帖子中建议的其他一些事情.
我想我曾经读到过一次,如果包名与模块名相同,则默认情况下Exporter以某种方式工作.我不知道将模块放在子目录中是否可以改变该行为(?).但是,我很想知道我是如何搞砸的.