2012-07-17 33 views
1

我正在研究用Perl重写旧的应用程序。在不同的目录中设置perl软件包

设置三个软件包并从它们运行子例程对我将要做的事情有很大的意义,但我对设置软件包并不是很熟悉。

我希望软件包与我的其他Perl脚本处于相同的位置,即此bin目录中的脚本除了脚本之外无需调用这些软件包。

我的问题是如何指示Perl知道我的软件包在哪里(以及如何将它们安装在默认的其他位置),这是一个好的/聪明的事情吗?

回答

4

这是一个常见的任务。该PERL5LIB环境变量包含目录,以寻找一个模块列表,您还可以使用的lib pragma指定目录特定脚本应该寻找模块:

#!/usr/bin/perl 

use strict; 
use warnings; 
use lib "$ENV{HOME}/lib"; 

您可能还需要寻找到cpanmlocal::lib

2

如果包和脚本在同一个位置,我推荐使用FindBin

use FindBin '$Bin'; 
use lib $Bin; 
+1

如果他们是在相同的位置,是不是路径已经包括在内? – 2012-07-17 15:41:31

+0

'FindBin'不被弃用,但它以一种非常模糊的方式做事,并且容易中断,[如此处所述](http://www.perlmonks.org/?node_id=41213)。我认为[scriptname](https://metacpan.org/module/scriptname)是一个更好的选择。 – Borodin 2012-07-17 17:10:01

+1

@DimitarPetrov:不一定。 '@ INC'包含当前工作目录('.'),而不是脚本所在的目录。如果脚本包含在当前工作目录中,两者只是相同的。 – Zaid 2012-07-17 19:55:21

相关问题