【发布时间】: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]