【问题标题】:Perl package file Can't locate [duplicate]Perl包文件找不到[重复]
【发布时间】:2019-02-26 10:53:15
【问题描述】:

我已经在 perl 中集成了示例函数。一切正常,但我无法连接 Perl 模块包文件(.pm)

请查看以下代码

样本.pl

#!/usr/bin/perl

 use strict;
 use warnings;
 use Sample;
print Sample->test_function();

样品.pm

 package Sample;

  sub  test_function
  {

  return 'Welcome';

  }

运行 sample.pl 文件后。它返回错误 "Can't locate Sample.pm " 但包文件在同一文件夹中可用。

【问题讨论】:

    标签: perl


    【解决方案1】:

    问题的原因是找不到安装的 perl 模块位置。在您的 sample.pl 文件中添加以下行

     use strict;
     use warnings;
    
     use Cwd qw( abs_path );
     use File::Basename qw( dirname );
     use lib dirname(abs_path($0));
    
    
     use Sample;
     print Sample->test_function();
    

    【讨论】:

    【解决方案2】:

    首先,您的Sample.pm 文件必须完成返回一个真值。执行此操作的常用方法是附加 1; 和该文件的末尾。

    package Sample;
    use strict;
    use warnings;
    sub  test_function {
       return 'Welcome';
    }
    1;
    

    在 Perl 5.26 之后,当前目录已从 @INC 中删除。有几种方法可以解决这个问题。例如,您可以在运行脚本时使用-I 选项:

    perl -I. sample.pl
    

    关于如何处理@INC的更深入的讲座,请read this SO post

    【讨论】:

    • 强制脚本的调用者提供该信息是没有意义的。
    • -I ... 不添加拱目录,因此它并不总是有效。应该使用-Mlib=... 来获取特定于构建的组件。
    猜你喜欢
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 2020-01-21
    • 1970-01-01
    相关资源
    最近更新 更多