处理cmd时Perl中的特殊字符

时间:2014-05-06 02:37:11

标签: perl

@output_lines="pwd" ;

@value1 = q(set "a=). "@output_lines" . q(") . " & echo %a%" . "| rest.exe";
print "@value1      END\n";

print " $prog : output lines  @output_lines";
system(@value1);




#comment
o/p
set "a=pwd" & echo %a%| rest.exe

rest.exe接受NAGA作为输入并处理此情况下没有问题。

但是当我传递以下值作为输入时

@output_lines="pwd$as$d";

o / p更改为:

set "a=pwd" & echo %a%| rest.exe

在这种情况下,将忽略特殊字符以解决此问题。

1 个答案:

答案 0 :(得分:2)

我相信你不知道在Perl中以@开头的变量与以$开头的变量不同。当您将字符串分配给标量时,您将字符串分配给数组变量。此外,单引号和双引号之间存在差异。所有这些都应该在任何Perl书的前几章中解释。

由于您没有使用strict和使用双引号,"pwd$as$d"被解释为“pwd”,后跟两个未定义的变量。

你可能想要完成的是:

use strict;
use warnings;
# ...
my $output_lines='pwd$as$d';

my $value1 = q{set "a=}.$output_lines.q{" & echo %a% | rest.exe};
print "$value1      END\n";
# assuming you defined $prog somewhere
print " $prog : output lines  $output_lines";
system($value1);