如何使用-M标志通过命令行中的相对路径加载Perl模块?

时间:2018-08-13 11:31:07

标签: perl unix

我有以下代码: demo.pm

#! user/local/bin/perl
use strict;
use warnings;
package demo;
sub doit{
  print("Inside DoIt\n");
  my $a = shift();
  my $b = shift();
  print("$a\n");
}

文件demo.pm位于其他位置,想要使用相对路径来获取模块并运行

在linux命令中使用以下命令会引发错误: perl -M / sub1 / sub2 / demo.pm -e'demo :: doit('arg1')'

错误:
-e第0行,“ use / sub1 /”附近出现语法错误 -e的执行由于编译错误而中止。

1 个答案:

答案 0 :(得分:2)

如果您具有绝对路径,并且希望所有脚本都找到该模块:

export PERL5LIB="${PERL5LIB:+"$PERL5LIB:"}/path/to/lib"  # In your login script.
script

如果您具有绝对路径,并且希望执行一次脚本来查找模块:

PERL5LIB="${PERL5LIB:+"$PERL5LIB:"}/path/to/lib" script

如果您在相对于脚本的目录中安装了模块:

use FindBin qw( $RealBin );
use lib "$RealBin/../lib";

在您的特定情况下:

perl -Mlib=/sub1/sub2 -Mdemo -e'demo::doit("arg1")'

避免使用-I。它不包括PERL5LIB和lib.pm这样的相关Arch Dirs,因此具有特定于Arch的组件的模块将无法加载。