gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:14:01 24 4
gpt4 key购买 nike

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

  • 通过 SSH 连接到其中一台服务器并使用 Net::OpenSSH Perl 模块执行一些操作。
  • 我想使用 Log::Log4perl Perl 模块将整个脚本日志存储在特定的日志文件中。
  • 我想使用 Text::CSV Perl 模块将一些数据写入 CSV 文件。

其实这三个Perl Module已经安装在了不同的目录下。

让我们说-

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

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

方法一:

#!/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 模块的方法,如下所示:

方法二:

#!/usr/bin/perl

use strict;
use warnings;

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

上述方法对我也很有效。

我找到了使用 FindBin 调用这些 Perl 模块的标准方法.

我对它的语法感到困惑。我如何使用 FindBin Perl 模块实现同样的效果。

方法三:

#!/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";
...

这会引发以下错误,当我使用前两种方法(方法 1、方法 2)时不会出现此错误。

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

方法三哪里做错了?

最佳答案

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

如果脚本所在的目录和模块所在的目录之间没有关系,那么使用$RealBin就没有意义了。 .事实上,通常使用 PERL5LIB 更有意义环境变量比 use lib在这种情况下。

另一方面,如果脚本位于 /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 , 真的。

关于perl - 调用安装在不同路径/目录中的 Perl 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63915444/

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