【问题标题】:Loading a Module with a Namesace Overlap in Perl在 Perl 中加载具有名称重叠的模块
【发布时间】:2014-03-11 00:23:09
【问题描述】:

快速总结: 我的脚本更改了用于加载模块的符号链接,我需要从同一位置加载同一模块的两个不同版本,一次是在移动之前,一次是在移动之后。

详细总结: 我的脚本更改了我正在处理的程序的已安装版本。

在一个文件夹中,我有一个符号链接 ( '/a/b/c/parallelogram' ),它指向我的软件的已安装分支 ( '/a/b/c/1_parallelogram' )。

我的脚本以“使用平行四边形::Const”开头。然后,我做一些事情,包括使我的平行四边形符号链接指向'/a/b/c/2_parallelogram'。

此时,我有一个“需要 2_parallelogram/Config.pm”。 问题在于 Config.pm 有一个“使用平行四边形::Const”我需要这个来引用 2_parallelogram 中的 Const.pm,但由于我已经加载了 1_parallelogram/Const.pm,所以它使用该文件。

我无法更改 Config.pm 或 Const.pm 的内容。

有没有办法让我在本地限定这些“使用”语句,或者覆盖加载的模块,或者卸载这些模块?

任何想法表示赞赏!

【问题讨论】:

    标签: perl module namespaces overlap


    【解决方案1】:

    更改符号链接后,执行以下操作:

    delete $INC{'parallelogram/Const.pm'};
    delete $INC{'parallelogram/Config.pm'};
    use Symbol 'delete_package';
    delete_package('parallelogram::Const');
    delete_package('parallelogram::Config');
    require parallelogram::Config;
    

    【讨论】:

      猜你喜欢
      • 2012-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多