Perl更改当前包?

时间:2010-10-08 22:09:15

标签: perl

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

1 个答案:

答案 0 :(得分:5)

我认为您可以通过在C级更改PL_curstashPL_curstname来实现这一目标。

PL_curstash = gv_stashpvs("Some::Package", GV_ADD);
sv_setpvs(PL_curstname, "Some::Package");

PL_curstash是编译期间当前包的藏匿处,PL_curstname是其名称。

<强>更新

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