gpt4 book ai didi

perl - 为什么一个模块可以自行编译,但在其他地方使用时会失败?

转载 作者:行者123 更新时间:2023-12-04 22:17:05 25 4
gpt4 key购买 nike

我有一个 Perl 模块,它似乎可以自行编译,但在包含它时会导致其他程序编译失败:

me@host:~/code $ perl -c -Imodules modules/Rebat/Store.pm
modules/Rebat/Store.pm syntax OK
me@host:~/code $ perl -c -Imodules bin/rebat-report-status
Attempt to reload Rebat/Store.pm aborted
Compilation failed in require at bin/rebat-report-status line 4.
BEGIN failed--compilation aborted at bin/rebat-report-status line 4.
rebat-report-status 的前几行是
...
3 use Rebat;
4 use Rebat::Store;
5 use strict;
...

最佳答案

编辑 (为后代):发生这种情况的另一个原因,也许是最常见的原因,是您正在使用的模块之间存在循环依赖关系。

查看 Rebat/Store.pm寻找线索。您的日志显示尝试重新加载已中止。也许 Rebat已经进口 Rebat::Store , 和 Rebat::Store有一些包范围检查以防止被加载两次。

这段代码演示了我所说的那种情况:

# m1.pl:
use M1;
use M1::M2;
M1::M2::x();

# M1.pm
package M1;
use M1::M2;
1;

# M1/M2.pm
package M1::M2;
our $imported = 0;
sub import {
die "Attempt to reload M1::M2 aborted.\n" if $imported++;
}
sub x { print "42\n" }
1;
$ perl m1.pl
Attempt to reload M1::M2 aborted.
BEGIN failed--compilation aborted at m1.pl line 3.

如果您只删除 use M1::M2,代码将编译(并打印 42)输入 m1.pl .在您的情况下,您可能不需要显式 use Rebat::Store在你的程序中。

关于perl - 为什么一个模块可以自行编译,但在其他地方使用时会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2202243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com