我正在开发一个很大的Perl模块,在终端运行时它的工作很有魅力。当用Intellij IDEA CE运行i时,会弹出以下错误。这种情况在软件的所有主要版本中都会发生。
我的程序启动:
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use feature qw (say);
use Getopt::Long;
use lib 'lib';
die('this is a test');
...
Perl自己的lib.pm是这样启动的
package lib;
# THIS FILE IS AUTOMATICALLY GENERATED FROM lib_pm.PL.
# ANY CHANGES TO THIS FILE WILL BE OVERWRITTEN BY THE NEXT PERL BUILD.
use Config;
use strict;
my $archname = $Config{archname};
my $version = $Config{version};
my @inc_version_list = reverse split / /, $Config{inc_version_list};
our @ORIG_INC = @INC; # take a handy copy of 'original' value
our $VERSION = '0.65';
...
在Intellij IDEA中,这导致
/usr/bin/perl -I/home/user/git/mytool/lib -I/home/user/git/mytool/lib/Download /home/user/git/mytool/download.pl Digi20
Global symbol "%Config" requires explicit package name (did you forget to declare "my %Config"?) at /usr/lib/x86_64-linux-gnu/perl-base/lib.pm line 10.
Global symbol "%Config" requires explicit package name (did you forget to declare "my %Config"?) at /usr/lib/x86_64-linux-gnu/perl-base/lib.pm line 11.
Global symbol "%Config" requires explicit package name (did you forget to declare "my %Config"?) at /usr/lib/x86_64-linux-gnu/perl-base/lib.pm line 12.
Compilation failed in require at /home/user/git/mytool/download.pl line 10.
我不知道perl可执行文件的-I参数是在哪里配置的,在运行对话框中,我没有配置perl参数。
Ubuntu 22.04 LTA + Perl 5.34。在我的家庭办公室机器上一切都很好。但在办公室机器上就不行了。同步IDE设置home〉office没有帮助。
发现另一个用户具有similar issue on Eclipse,但错误来自另一个模块。我的配置模块已命名为Download::Config。
2条答案
按热度按时间inb24sb21#
Perl自带了一个名为
Config
的模块,它默认导出一个名为%Config
的散列。该错误是由于
%Config
未由use Config;
导出。我猜一个名为
Config
的不同模块正在被use Config;
拾取。您可以在use Config;
之后使用BEGIN { print "$INC{'Config.pm'}\n" }
来验证这一点。你应该给你的模块起个别的名字。
也就是说,我怀疑您实际上没有一个名为Config的模块,我怀疑您有一个名为Download::Config的模块(这很好),但是
/home/user/git/mytool/lib/Download
被错误地添加到@INC
中。xtfmy6hx2#
我找到了解决办法:
Intellij IDEA将配置好的库目的地作为
-I
参数添加到Perl调用中。注意图片中的紫色标记。Download文件夹也是紫色的。这导致了错误。在项目结构设置中有类似的设置,但这不会导致添加
-I
参数。