2013-12-17 43 views
3

我想執行下面的perl腳本。獲取一個意外的空間在Perl輸出

$var = "\$53:\$\?\$\?\$\? \$\=BAbc \$\? \$53: \$ hjk" 
$var =~ s/(\$\=B)/FLAGB/; 
$var =~ s/(?<=\$53:).*?(?=.[^\$\?\s])// 
$var =~ s/(FLAGB)/\$\=B/; 
print "\n$var"; 

的輸出,我得到是

$53: $=BAbc $? $53: $ hjkb 

什麼,我試圖做的是去除所有$和/或?和/或空間$53後:直到第一個字符(?超過$或或空間等),遇到和維護,如果$=B(我與FLAGB代行操作之前替換它)

現在我不能夠找到原因一個額外的空間出現在輸出$53後:

$53: $=BAbc $? $53: $ hjkb 

原諒我的無知,如果問題是一些愚蠢的,我是新來的Perl。

+1

附註;在將來維護這段代碼時玩得開心。 :) –

回答

3

我覺得

s/(?<=\$53:).*?(?=.[^\$\?\s])// 

應該沒有點:

s/(?<=\$53:).*?(?=[^\$\?\s])// 

那一個不停的空間H作爲先行之前。

+0

是的,它的工作原理! :)你的答案很棒! – anurag

2

務實的事情是擺脫空間。

$var =~ s/(?<=:)\s//g; 
+0

是的,可以做到。但是我仍然不確定爲什麼在53美元的起始處出現額外的空間: – anurag