调用安装在不同路径/目录中的Perl模块
我正在编写一个Perl脚本,它可以-调用安装在不同路径/目录中的Perl模块,perl,perl-module,Perl,Perl Module,我正在编写一个Perl脚本,它可以- SSH连接到一个服务器,并使用Net::OpenSSHPerl模块执行一些操作 我希望使用log::Log4perlPerl模块将脚本的整个日志存储在特定的日志文件中 我想使用Text::CSVPerl模块将一些数据写入CSV文件 实际上,这三个Perl模块安装在不同的目录中 比方说- Net::OpenSSH安装在/path/to/lib1中 Log::Log4perl安装在/path/to/lib2中 Text::CSV安装在/path/to/li
- SSH连接到一个服务器,并使用
Perl模块执行一些操作Net::OpenSSH
- 我希望使用
Perl模块将脚本的整个日志存储在特定的日志文件中log::Log4perl
- 我想使用
Perl模块将一些数据写入CSV文件Text::CSV
安装在/path/to/lib1中Net::OpenSSH
安装在/path/to/lib2中Log::Log4perl
安装在/path/to/lib3中Text::CSV
#!/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
..
#!/usr/bin/perl
use strict;
use warnings;
use lib '/path/to/lib1';
use lib '/path/to/lib2';
use lib '/path/to/lib3';
...
#!/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";
...
这对我来说非常好
我找到了另一种方法来调用这些Perl模块,如下所示:
方法2:
#!/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
..
#!/usr/bin/perl
use strict;
use warnings;
use lib '/path/to/lib1';
use lib '/path/to/lib2';
use lib '/path/to/lib3';
...
#!/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";
...
以上方法对我来说也很好
我通过使用找到了调用这些Perl模块的标准方法
我对它的语法感到困惑。如何使用FindBin
Perl模块实现同样的功能
方法3:
#!/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
..
#!/usr/bin/perl
use strict;
use warnings;
use lib '/path/to/lib1';
use lib '/path/to/lib2';
use lib '/path/to/lib3';
...
#!/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)时不会出现
我在方法3中哪里做错了?
$RealBin
是脚本所在的目录。($Bin
是同一事物的损坏版本。)
如果脚本所在的目录与模块所在的目录之间没有关系,则使用$RealBin
是没有意义的。事实上,在这种情况下,使用PERL5LIB
env变量通常比使用lib更有意义
另一方面,如果脚本位于/path/to/bin
,则使用相对于$RealBin
的路径可能是有意义的
在/path/to/bin/script中使用lib#,
“$RealBin/。/lib1”,这是/path/to/bin/。/lib1或/path/to/lib1
“$RealBin/。/lib2”,这是/path/to/bin/。/lib2或/path/to/lib2
“$RealBin/。/lib3”;#这是/path/to/bin/./lib3或/path/to/lib3
$RealBin
通常在脚本和模块打包在一起(同一项目的一部分)时使用。对于使用lib也一样,真的。在我的例子中,脚本所在的目录和模块所在的目录之间没有关系。所以我想使用环境varPERL5LIB
。你能提供更多关于这方面的信息吗。当我打印$ENV{'PERL5LIB'}
时,我在终端中没有找到任何东西。这是检查的正确方法吗?看。在unixy系统上,export PERL5LIB=/path/to/lib1:/path/to/lib2:/path/to/lib3