【发布时间】:2009-11-11 00:53:05
【问题描述】:
我有一个面向对象的网络应用程序,它安装在我服务器上的多个位置。一次用于“live”,一次用于“beta”,等等。作为面向对象,它由许多 perl 模块组成。在主模块中,我必须为该应用程序实例的所有 custom perl 模块“使用 lib”适当的目录。
这没什么大不了的,我有一个 BEGIN 块来检查主程序的位置并适当地设置库目录。但是我也有很多实用程序,需要做同样事情的命令行程序。我不想到处剪切和粘贴这段代码。
在需要它的各种程序之间共享此代码 sn-p 的最佳方式是什么?
我无法“使用”它,因为尚未设置库路径。也许“做”或“要求”是正确的答案,但两者都会搜索@INC,这是不合适的。
也许像eval `cat GetLib.pl`; 这样的东西比较合适,但它看起来有点笨重和脆弱。
这是我目前使用的 BEGIN 块:
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";
}
}
谢谢!
【问题讨论】:
-
正如我在回复中暗示的那样,我认为您在这里问错了问题,因为您让生活变得比应有的更加困难。您的代码应始终位于同一路径中——它位于您的修订控制系统中,您可以在其中区分“实时”和“测试版”代码。
-
Ether:当实时代码和测试代码都在同一台服务器上运行时,它们如何驻留在同一路径中?
标签: perl