如何解决访问目录名中包含@的路径的问题

时间:2017-08-18 13:57:01

标签: perl path

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"|);

我还看到了另外一个问题。 当它工作一次..没有线索为什么以及如何工作,但lib没有添加到@INC路径。

尝试2:没有工作 - 我在帖子中看到\ x40代表@

$ENV{'WA'} =~ s/(^.*)@(.*)/$1\x40$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中找到模块 至少我现在没有意外插入@

有人可以就如何解决此问题给我一些指示。

2 个答案:

答案 0 :(得分:2)

为什么需要字符串eval?

if(!TextUtils.isEmpty(display_name) && !TextUtils.isEmpty(email) && 
!TextUtils.isEmpty(password)){

    mRegProgress.setTitle("Registering User");
    mRegProgress.setMessage("Please wait....");
    mRegProgress.setCanceledOnTouchOutside(false);
    mRegProgress.show();

    register_user(display_name, email, password);
    // This is where you reset your text inputs and other bits and pieces.
    // Start your logic to validate the input here
    if (mDisplayName.getEditText().getText().toString().length() == 0){
        .../...

}else{
    // Put your logic here if there is no input. 

或者,如果您只想设置@INC,如果定义了AC:

BEGIN {
    if (defined $ENV{WA}) {
        $ENV{AC} = "$ENV{WA}/right";
    }
}

use lib "$ENV{AC}/lib";

答案 1 :(得分:1)

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"       : ();
相关问题