【问题标题】:In Perl, can't locate packgeName.pm in @INC error在 Perl 中,无法在 @INC 错误中找到 packgeName.pm
【发布时间】:2015-06-05 05:49:43
【问题描述】:

这是一个模块math.pm,有两个基本函数加法和乘法:

package Math;
use strict;
use warnings;
use Exporter qw(import);
our @EXPORT_OK = qw(add multiply); 

sub add {
my ($x, $y) = @_;
return $x + $y;
}

sub multiply {
my ($x, $y) = @_;
return $x * $y;
}

1;

这是调用 add 函数的脚本script.pl

#!/usr/bin/perl
use strict;
use warnings;

use Math qw(add);
print add(19, 23);

它给出了一个错误:

无法在 @INC 中找到 math.pm 在 C:\programs\script.pl 第 5 行。 BEGIN 失败——编译在 C:\programs\script.pl 第 5 行中止。

如何解决这个问题?

【问题讨论】:

  • 问题是什么?有什么问题?
  • 嘿@serenesat prob 在此代码中不起作用并给出此类错误
  • 对我来说它工作正常。如果您将两个程序放在同一路径上。它应该可以工作。
  • 不知道我运行这个程序时出了什么问题
  • 在错误消息中显示math.pm 并且您的代码显示package Math;(在名为Math.pm 的文件中) - 您必须使用正确的大小写。检查您的模块的文件名,您的脚本use math; 将导致您显示的错误消息。

标签: perl module package


【解决方案1】:

use lib

向脚本添加 use lib 语句会将目录添加到该特定脚本的@INC。不管是谁在什么环境下运行它。

您只需要确保在尝试加载模块之前有 use lib 语句:

use lib '/path/to/module';
use Math qw(add);

有关设置@INC 的更多详细信息,请查看:

How do I include a Perl module that's in a different directory

【讨论】:

    【解决方案2】:

    script.pluse Math ...;之前添加以下内容:

    use FindBin qw( $RealBin );
    use lib $RealBin;
    

    如果script.plmath.pm不在同一个目录下,相应调整。

    此外,如果文件名为 math.pm 并且您使用 use Math;package Math;,您可能会遇到问题。最好重命名文件,使拼写保持一致。

    ren math.pm Math.pm
    

    【讨论】:

      猜你喜欢
      • 2012-09-12
      • 1970-01-01
      • 2011-09-11
      • 2012-06-23
      • 2013-05-19
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多