【发布时间】:2021-01-03 00:19:32
【问题描述】:
我正在编写一个 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 行中提到了各自的路径,如下所示:
方法一:
#!/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 ...
我在方法 3 中哪里做错了?
【问题讨论】:
标签: perl perl-module