【问题标题】:Can't locate MyPerlModule.pm in @INC [closed]在@INC 中找不到 MyPerlModule.pm [关闭]
【发布时间】:2021-12-29 06:57:12
【问题描述】:

我正在尝试在 perl 脚本中使用我自己的 .pm,它在 Mac OS Big Sur 上引发以下错误。这同样适用于 mac OS 10.15.7。

Can't locate MyPerlModule.pm in @INC 
(@INC contains: /Library/Perl/5.30/darwin-thread-multi-2level /Library/Perl/5.30 /Network/Library/Perl/5.30/darwin-thread-multi-2level /Network/Library/Perl/5.30 /Library/Perl/Updates/5.30.2 /System/Library/Perl/5.30/darwin-thread-multi-2level /System/Library/Perl/5.30 /System/Library/Perl/Extras/5.30/darwin-thread-multi-2level /System/Library/Perl/Extras/5.30
)

脚本已经有 use lib 指定包含 MyPerlModule.pm 的文件夹的路径。但是这条路径没有附加到@INC。

也尝试过 BEGIN{push @INC, path },但还是有同样的错误。

【问题讨论】:

  • 尝试将您的脚本减少到最低限度:即这两行 'use lib "/some/path";使用 MyPerlModule;'然后看看你得到什么错误信息。
  • @DaveMitchell,我也看到了与最低限度脚本相同的错误。

标签: perl


【解决方案1】:

如果你展示你的实际程序,我们可能会看到你在做。

在错误消息中,您会看到@INC 中的路径列表。我没有看到您期望的看起来像本地路径的东西。那里出了点问题。

您提到使用BEGIN { push @INC, ... },但通常人们希望他们的本地库目录成为 Perl 检查的第一个目录。您可以改用unshift

BEGIN { unshift @INC, 'lib' }

但是,这与lib 所做的相同:

use lib qw(lib);

在你尝试加载你的模块之前,任何一种方式都必须发生

use lib qw(lib);
use MyPerlModule;  # in lib/MyPerlModule.pm

请注意,有些人可能习惯于将他们的本地模块放在与脚本相同的目录中。在 Perl 5.26 之前,@INC 包含当前工作目录作为条目。 That doesn't work anymore.

【讨论】:

    猜你喜欢
    • 2020-10-14
    • 1970-01-01
    • 2017-07-13
    • 2021-03-03
    • 2013-10-24
    • 2018-01-11
    • 2020-07-15
    • 2018-11-08
    • 2021-11-17
    相关资源
    最近更新 更多