2014-05-06 66 views
-3
@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作爲輸入並且它處理在這種情況下沒有問題。處理cmd時在Perl中的特殊字符

但是當我通過下面的值作爲輸入

@output_lines="pwd$as$d"; 

O/P的變化:

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

在這種情況下,特殊字符將被忽略如何解決這個問題。

+0

我要編輯這個給你,但在代碼結束,開始我不知道,你應該考慮格式化你的代碼。每行代碼應以4個空格開頭。在句子中使用反引號代碼 – Gabs00

+0

已完成更改...謝謝你的寶貴意見 – user3571518

+0

'$ as'和'$ d'中的內容如果未定義,它們將不會打印任何東西 – Gabs00

回答

2

我相信你不知道在Perl中以@開頭的變量與以$開頭的變量不同。你應該把你的字符串分配給數組變量時,你應該把它們分配給標量。另外,單引號和雙引號之間也有區別。所有這些都應該在任何Perl書籍的前幾章中解釋。

由於您沒有使用嚴格和使用雙引號,"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);