gpt4 book ai didi

perl - 如何根据安装位置 "use lib"找到适当的目录?

转载 作者:行者123 更新时间:2023-12-04 09:56:52 28 4
gpt4 key购买 nike

我有一个面向对象的网络应用程序,它安装在我服务器上的多个位置。一次用于“live”,一次用于“beta”,等等。作为面向对象,它由许多 perl 模块组成。在主模块中,我必须为该应用程序实例的所有自定义 perl 模块“使用 lib”适当的目录。

这没什么大不了的,我有一个 BEGIN block 来检查主程序的位置并适本地设置库目录。但是我也有很多实用程序,需要做同样事情的命令行程序。我不想到处剪切和粘贴这段代码。

在需要它的各种程序之间共享此代码片段的最佳方式是什么?

我无法“使用”它,因为尚未设置库路径。也许“做”或“要求”是正确的答案,但是这两个都会搜索@INC,这是不合适的。

也许像 eval `cat GetLib.pl`;会是合适的,但它似乎有点笨重和脆弱。

这是我目前使用的 BEGIN block :

BEGIN {
use FindBin qw ($Bin);
require lib;

if ($Bin =~ /^\/home\/w\/myapp_live/) {
lib->import('/home/w/myapp_live/lib');
print STDERR "live site\n";
}

if ($Bin =~ /^\/home\/w\/myapp_beta/) {
lib->import('/home/w/myapp_beta/lib');
print STDERR "beta site\n";
}

if ($Bin =~ /^\/home\/w\/myapp_test/) {
lib->import('/home/w/myapp_test/lib');
print STDERR "testing site\n";
}

}

谢谢!

最佳答案

FindBin::libs非常适合这一点。我已经在一个大型系统中使用了一段时间,完全没有问题。

默认调用看起来很适合您,简单地说:

use FindBin::libs;

这将搜索所有 ./lib当前文件的目录和 use lib的所有父目录中的目录他们。因此,例如,如果您的脚本位于 /home/w/myapp_live/scripts/defurblise_widgets.pl (和 use() es FindBin::libs),它将查找:
/home/w/myapp_live/scripts/lib
/home/w/myapp_live/lib
/home/w/lib
/home/lib
/lib # (presumably!)

任何它找到的都添加到您 @INCuse lib .

但是,如果这不是您所需要的,它是一个非常灵活的模块。如果你找不到一种方法让它做你想做的事,我会感到惊讶。

关于perl - 如何根据安装位置 "use lib"找到适当的目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1712307/

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