【问题标题】:Perl can't find module listed in same directory as scriptPerl 找不到与脚本在同一目录中列出的模块
【发布时间】:2018-07-11 04:58:36
【问题描述】:

我需要将任何自定义模块保存在与我的脚本相同的目录中。

我不断收到此错误提示 Perl 无法“看到”我声明的模块

全局符号“$employment_type”需要在 early_enrollments_by_term.pl 第 260 行显示包名。

early_enrollments_by_term.pl 的执行由于编译错误而中止。

我的模块是Hash.pm,在目录/home/pgb2/canvas/canvas-sis-feeds/scripts/lib/Custom

哈希.pm

package Custom::Hash;

我的脚本是early_enrollments_by_term.pl 并位于/home/pgb2/canvas/canvas-sis-feeds/scripts/

early_enrollments_by_term.pl

#!/usr/bin/perl

use strict;

use DBI;

use lib qw(/home/pgb2/canvas/canvas-sis-feeds/scripts/lib);

use Custom::Hash;

my $enrollment_type = $Custom::Hash::enrollment_hash{$role};  # line 259
print "\nenrollment_type: $employment_type\n";                # line 260

谁能说出为什么找不到模块?

【问题讨论】:

  • 请注意,最近的 Perl 版本(你没有说你使用的是哪一个),即 5.26 及更高版本,在 @INC 中不包含 .(本地目录),因此默认情况下是一个模块默认情况下不会在与脚本相同的目录中找到。有关所有详细信息,请参阅wiki.gentoo.org/wiki/Project:Perl/Dot-In-INC-Removal。由于您提供了完整路径,因此您本身没有问题,但是当您想将脚本+库移动到其他地方时,这会使事情变得复杂。请参阅FindBin 模块以帮助解决该案例。
  • 错误信息表明模块被找到。问题是 module 脚本包含编译时错误 [edited]

标签: perl module package


【解决方案1】:

尽管您展示的代码很少, 问题大概是你已经声明了$enrollment_type,并试图使用$employment_type,但尚未声明

如果 perl 无法找到模块,则 use Custom::Hash 语句会引发错误

【讨论】:

  • 谢谢,我都没注意到!这最初是其他人的“不起作用”的脚本。再次感谢您!
猜你喜欢
  • 2010-10-18
  • 2012-01-21
  • 1970-01-01
  • 2022-07-21
  • 2023-03-13
  • 1970-01-01
  • 2021-09-24
  • 2013-04-24
  • 2015-02-06
相关资源
最近更新 更多