@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
在这种情况下,将忽略特殊字符以解决此问题。
答案 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);