Perl在Intellij IDEA中的应用:全局符号“%Config”需要显式的软件包名称(您是否忘记声明“my %Config”?)lib.pm

yqlxgs2m  于 2023-01-13  发布在  Perl
关注(0)|答案(2)|浏览(235)

我正在开发一个很大的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。

inb24sb2

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中。

xtfmy6hx

xtfmy6hx2#

我找到了解决办法:
Intellij IDEA将配置好的库目的地作为-I参数添加到Perl调用中。注意图片中的紫色标记。Download文件夹也是紫色的。这导致了错误。

在项目结构设置中有类似的设置,但这不会导致添加-I参数。

相关问题