program.pl
Use Mypackage;
sub test{
print "from test";
}
Mypackage.pl
Package Mypackage;
::test();
这没有任何回报。
我从包中看到了几个关于命名空间中调用子例程的线程,但我想做相反
从主命名空间(program.pl)打印包中的子程序
这可能吗?
答案 0 :(得分:5)
声明use Mypackage
为equivalent to
BEGIN { require Mypackage; Mypackage->import( ); }
所以我们看到Mypackage
在执行主程序之前执行(因为它在BEGIN
块中)。有关详细信息,请参阅this答案另一个示例。因此,目前尚未定义主程序中的子test()
。为了使它工作,我们
需要在Mypackage
运行时定义它。一种方法是
将它放在主程序中BEGIN
语句之前的use Mypackage
块中。
BEGIN {
sub test{
print "from test\n";
}
}
use Mypackage;