我已将我的问题简化为一个小例子。从包中导入/导出函数的工作方式发生了一些我不理解的事情。
此代码有效,我可以从 use-myPack.pl 调用 greet()。
# myPack.pm
package myPack;
require Exporter;
@ISA = qw(Exporter);
@EXPORT_OK = ('greet');
sub greet {
printf("Hello!\n");
}
1;
# use-myPack.pl
use myPack qw(greet);
greet();
# Output
PS C:\Users\adam> perl .\use-myPack.pl
Hello!
但是,当我从父目录调用 use-myPack.pl 并使用::
运算符确保它仍然可以使用 myPack 时,它找不到调用的函数greet()
。
# myPack.pm
package myPack;
require Exporter;
@ISA = qw(Exporter);
@EXPORT_OK = ('greet');
sub greet {
printf("Hello!\n");
}
1;
# use-myPack.pl
use adam::myPack qw(greet);
greet();
# Output
PS C:\Users> perl .\adam\use-myPack.pl
Undefined subroutine &main::greet called at .\adam\use-myPack.pl line 2.
谁能帮助解释为什么我可以greet()
在第一种情况下打电话,而不能在第二种情况下打电话?