Perl - 从包

时间:2018-04-11 08:52:52

标签: perl namespaces package subroutine

program.pl

Use Mypackage;

sub test{

print "from test";

}

Mypackage.pl

Package Mypackage;

::test();

这没有任何回报。

我从包中看到了几个关于命名空间中调用子例程的线程,但我想做相反

从主命名空间(program.pl)打印包中的子程序

这可能吗?

1 个答案:

答案 0 :(得分:5)

声明use Mypackageequivalent to

BEGIN { require Mypackage; Mypackage->import( ); }

所以我们看到Mypackage在执行主程序之前执行(因为它在BEGIN块中)。有关详细信息,请参阅this答案另一个示例。因此,目前尚未定义主程序中的子test()。为了使它工作,我们 需要在Mypackage运行时定义它。一种方法是 将它放在主程序中BEGIN语句之前的use Mypackage块中。

BEGIN {
    sub test{
        print "from test\n";
    }
}    
use Mypackage;