Perl 更改当前包?

标签 perl

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

最佳答案

我认为您可以通过更改 PL_curstash 来做到这一点。和 PL_curstname在 C 级。

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 镜像更新后。

关于Perl 更改当前包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3894667/

相关文章:

perl - 如何在目录中找到最新创建的文件?

multithreading - Perl 线程 - 捕获退出

arrays - 获取一些数组而不循环

perl - 如何将字符串拆分为具有 undef 值的哈希键?

perl - 通过 perl Mechanize 获取有关文件附件的信息

regex - Perl正则表达式匹配特殊字符

perl - 如何在 Moose 中存储哈希值的哈希值?

perl - Pod 对 search.cpan 或 metacpan 不可见,为什么?

regex - 如何使用 Perl 从 HTML 文本中的相关链接获取文件扩展名?

Perl 中的 C 代码预处理