加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 如何根据安装位置“使用lib”相应的目录?

发布时间:2020-12-15 21:58:41 所属栏目:大数据 来源:网络整理
导读:我有一个面向对象的Web应用程序,它安装在我的服务器上的多个位置.一次用于“live”,一次用于“beta”等.面向对象,它由许多perl模块组成.在主模块中,我必须“使用lib”为该应用程序实例的所有自定义perl模块使用相应的目录. 这没什么大不了的,我有一个BEGIN块
我有一个面向对象的Web应用程序,它安装在我的服务器上的多个位置.一次用于“live”,一次用于“beta”等.面向对象,它由许多perl模块组成.在主模块中,我必须“使用lib”为该应用程序实例的所有自定义perl模块使用相应的目录.

这没什么大不了的,我有一个BEGIN块来检查主程序的位置并适当地设置库目录.但是我也有很多实用程序,命令行程序需要做同样的事情.我不想在任何地方剪切和粘贴此代码.

在需要它的各种程序中共享此代码段的最佳方法是什么?

我不能“使用”它,因为尚未设置libary路径.也许“做”或“要求”将是正确的答案,但这两者都会搜索@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 siten";
  }

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

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

}

谢谢!

解决方法

FindBin::libs非常适合.我已经在大型系统中使用了一段时间而没有任何问题.

默认调用看起来对你有用,只需:

use FindBin::libs;

这将在当前文件的目录的所有父目录中搜索所有./lib目录并使用lib.因此,例如,如果您的脚本位于/home/w/myapp_live/scripts/defurblise_widgets.pl(并使用()es FindBin :: libs),它将查找:

/home/w/myapp_live/scripts/lib
/home/w/myapp_live/lib
/home/w/lib
/home/lib
/lib       # (presumably!)

它找到的任何内容都会使用lib添加到@INC中.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读