WA=/perl/temp@23 (ENV PARAM)
if (defined $ENV{'WA'}) {
$ENV{'AC'} = "$ENV{'WA'}/right";
}
eval(qq|use lib "$ENV{'AC'}/lib"|);
错误 -- 在 (eval 1( 第 1 行的字符串中可能意外插入 @23。
我尝试了以下解决方案,但没有一个有很大帮助。
尝试 1:不起作用
$ENV{'WA'} =~ s/(^.*)@(.*)/$1@$2/;
if (defined $ENV{'WA'}) {
$ENV{'AC'} = "$ENV{'WA'}/right";
}
eval(qq|use lib "$ENV{'AC'}/lib"|);
我看到了另一个问题。 当它工作一次时..不知道它为什么以及如何工作,但库没有添加到@INC路径中。
尝试 2:不起作用 - 我在一篇文章中看到 \x40 代表 @
$ENV{'WA'} =~ s/(^.*)@(.*)/$1x40$2/;
if (defined $ENV{'WA'}) {
$ENV{'AC'} = "$ENV{'WA'}/right";
}
eval(qq|use lib "$ENV{'AC'}/lib"|);
尝试 3:一个错误到下一个错误
$ENV{'WA'} =~ s/(^.*)(@)(.*)/$1@$3/;
if (defined $ENV{'WA'}) {
$ENV{'AC'} = "$ENV{'WA'}/right";
}
my $str = $ENV{'AC'};
eval(qq|use lib "$str/lib"|);
use module
错误:在@INC中找不到模块 至少现在我不会得到意外的插值@
有人可以给我一些关于如何解决这个问题的指示。
为什么需要字符串 eval?
BEGIN {
if (defined $ENV{WA}) {
$ENV{AC} = "$ENV{WA}/right";
}
}
use lib "$ENV{AC}/lib";
或者,如果只想在定义了 AC 的情况下设置@INC:
use if defined $ENV{AC},
lib => do { no warnings 'uninitialized'; "$ENV{AC}/lib" };
use lib
defined($ENV{WA}) ? "$ENV{WA}/right/lib"
: defined($ENV{AC}) ? "$ENV{AC}/lib"
: ();
或
use lib
defined($ENV{WA}) ? "$ENV{WA}/right/lib" : (),
defined($ENV{AC}) ? "$ENV{AC}/lib" : ();