Perl - 从包调用主命名空间的子例程

The*_*ing 0 perl namespaces package subroutine

program.pl

Use Mypackage;

sub test{

print "from test";

}
Run Code Online (Sandbox Code Playgroud)

Mypackage.pl

Package Mypackage;

::test();
Run Code Online (Sandbox Code Playgroud)

这没什么回报.

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

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

这可能吗 ?

Håk*_*and 5

该声明use Mypackage等同于

BEGIN { require Mypackage; Mypackage->import( ); }
Run Code Online (Sandbox Code Playgroud)

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

BEGIN {
    sub test{
        print "from test\n";
    }
}    
use Mypackage;
Run Code Online (Sandbox Code Playgroud)

  • @Thenothing抱歉我不熟悉plackup.也许您应该发布一个显示您正在使用的特定代码的新问题? (2认同)