Perl更改当前包?

Eva*_*oll 5 perl

如果不使用源过滤器,有没有办法更改当前运行的包?我正在尝试完成oose.pm所做的同样的事情,我想知道我是否可以将我的用户放在非主程序包中.

raf*_*afl 5

我想你可以通过改变PL_curstashPL_curstnameC级来做到这一点.

PL_curstash = gv_stashpvs("Some::Package", GV_ADD);
sv_setpvs(PL_curstname, "Some::Package");
Run Code Online (Sandbox Code Playgroud)

PL_curstash是编译期间当前包的存储,PL_curstname是它的名字.

更新:

我发现这个问题很有意思并且实现了解决方案Devel::ChangePackage.结果我最初建议的工作原理.您可以从http://github.com/rafl/devel-changepackage获取它,或者在更新后从您附近的CPAN镜像获取它.