gpt4 book ai didi

perl - 在@INC 中高级搜索函数

转载 作者:行者123 更新时间:2023-12-02 09:03:49 25 4
gpt4 key购买 nike

我们是一个大型、复杂的 Perl 软件产品的作者。一些代码在可执行文件(网络守护进程)中,一些在 Perl 库(.pm 文件)中。我们的一些客户希望通过使用他们自己的代码覆盖我们的 Perl 'sub xxx {}' 函数来定制他们的系统。当我们调用另一个库中的函数时,这非常简单 - 我们将/usr/local/lib/our_product 放在 @INC 中,他们可以将自定义代码放在那里。这有两个问题:

  1. 他们创建的自定义文件需要覆盖他们要覆盖的 .pm 文件中的所有功能。如果有任何缺失,Perl 将无法在我们提供的默认 .pm 文件中找到它们。

  2. Perl 总是在@INC 之前检查本地文件。这可以防止他们的自定义 .pm 文件覆盖同一文件中的函数调用。

有解决这些问题的方法吗?

最佳答案

当我为遗留代码完成此操作后,我创建了一个具有不同名称的包,它将首先加载供应商包,然后允许覆盖:

 package Local::Overrides;
use Vendor::Real::Name;
use Vendor::Other::Name;


package Vendor::Real::Name {
no warnings 'redefine';

sub new_definition {

}
};

package Vendor::Other::Name {
no warnings 'redefine';

sub new_definition {

}
};

1;

然后您将分发一个同名的空模块,每个脚本都会始终加载该模块:

package Local::Overrides;

1;

我在 Effective Perl Programming 中介绍了一些此类内容.

还有很多其他技巧,但在不了解您的架构细节的情况下,我无法推荐太多。

关于perl - 在@INC 中高级搜索函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60604320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com