调用安装在不同路径/目录中的Perl模块

vkk05

我正在编写一个Perl脚本,它可以-

  • SSH到服务器之一,并使用Net::OpenSSHPerl模块执行一些操作
  • 我想使用Log::Log4perlPerl模块将脚本的整个日志存储在某些日志文件中
  • 我想使用Text::CSVPerl模块将一些数据写入CSV文件

实际上,这三个Perl模块已安装在不同的目录中。

可以说-

  • Net::OpenSSH 安装在/ path / to / lib1中
  • Log::Log4perl 安装在/ path / to / lib2中
  • Text::CSV 安装在/ path / to / lib3中

由于这些Perl模块已安装在不同的位置,因此我在Shebang行中提到了各自的路径,如下所示:

方法1:

#!/usr/bin/perl -I/path/to/lib1 -I/path/to/lib2 -I/path/to/lib3

use strict;
use warnings;

use Net::OpenSSH;
use Log::Log4perl;
use Text::CSV;

#continue flow of the script
..

这对我来说很好用。

我发现了另一种调用这些Perl模块的方法,如下所示:

方法2:

#!/usr/bin/perl

use strict;
use warnings;

use lib '/path/to/lib1';
use lib '/path/to/lib2';
use lib '/path/to/lib3';
...

上面的方法对我也很好。

我发现使用FindBin调用这些Perl模块的标准方法

我对其语法感到困惑。如何使用FindBinPerl模块实现相同的目标

方法3:

#!/usr/bin/perl

use strict;
use warnings;

use FindBin qw($Bin);
use lib "$Bin/path/to/lib1";
use lib "$Bin/path/to/lib2";
use lib "$Bin/path/to/lib3";
...

这引发了以下错误,当我使用前两种方法(Method1,Method2)时不会出现。

unable to load Perl module IO::Pty: Can't locate IO/Pty.pm in @INC ...

我在方法3中做错了什么?

池上

$RealBin是脚本所在的目录。$Bin是同一事物的损坏版本。)

如果脚本所在的目录与模块所在的目录之间没有关系,则使用没什么意义$RealBin实际上,与这种情况PERL5LIB相比use lib使用env var通常更有意义

另一方面,如果脚本位于中/path/to/bin,则使用相对于的路径可能很有意义$RealBin

use lib                 # In /path/to/bin/script,
   "$RealBin/../lib1",  #    This is /path/to/bin/../lib1, or /path/to/lib1
   "$RealBin/../lib2",  #    This is /path/to/bin/../lib2, or /path/to/lib2
   "$RealBin/../lib3";  #    This is /path/to/bin/../lib3, or /path/to/lib3

$RealBin通常在脚本和模块打包在一起(属于同一项目的一部分)时使用。同样的use lib,真的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将Tex live安装在与默认目录不同的目录中?

如何在GO中为不同路径使用不同的中间件?

如何检查Perl模块是否已安装在系统中

Perl6模块与Panda的安装路径

在Angular 2中将路径转换为具有不同参数的相同路径

VS2017中msbuild的不同路径

在主目录中安装Perl模块时出现问题

React-Router不会在不同路径上重新安装组件

Angular 5:不同模块中的不同路由器出口+延迟加载

Qt Creator:Android设置有错误。NDK目录结构不正确,并安装在带空格的路径中

从同一模块的不同导入中获得的Rust,相同类型,不同路径

为什么无法识别安装在python目录中的模块,却不能识别anaconda3下的模块?

在Unix中安装Perl模块

基于目录的不同路径

强制将现有模块安装在特定路径中

脚本安装在目录中,该目录不是PATH

REST中Wildfly中2个不同模块的相同路径

laravel中具有不同参数的不同路径到相同方法

如何从Linux中的不同路径运行python程序

如何将所有节点模块安装在不同的文件夹中?

C# MVC 使用 AJAX 调用不同路径中的方法

Marathon-lb 不同路径的规则

appendPathComponent(_:) 后的不同路径

Angular 路由器延迟加载:以相同路径开头的两个不同模块

Angular 6 从模块中的不同路径导入相同的组件

树中不同路径的数量,该路径中的节点值大于或等于 K

如何使用 slim 框架将不同目录中的不同路由分开

为什么 Python 的第三个包默认安装在与 Windows 上的 Python 安装不同的目录中?

不同版本的 Python 安装在不同的内核中