2011-11-10 119 views
6

我有代碼循環通過文件中的行,並嘗試打印出每行添加了開始和結尾的東西。Perl輸出覆蓋自己

但是,我得到這樣的輸出:「nominalte牛」。

基本上,行後的位(標稱)覆蓋了它的開始。我知道刪除chomp和regex行會停止這種效果,但我需要它在一行中不帶空格。我哪裏錯了?

while ($line = <INPUT>) { 

     chomp $line; 
     $line =~ s/ //g; 
     printf "\@attribute %s nominal\n", $line; 
} 
+3

「@ attribute」的元素是什麼? – 2011-11-10 15:49:07

+1

對不起,錯過了逃生字符,它的意思是明文(\ @att ...) – blitzen

回答

10

您的輸入文件可能來自MS Windows,行結尾編碼爲CR-LF。您也可以只需s/\r//刪除CR。

+1

太棒了!這正是出錯的地方,我會記住將來:)(我在我的解決方案中使用了$ line =〜s/\ r // g)。乾杯! – blitzen

6

您的變量中可能有\r。嘗試使用\s

$line =~ s/\s//g; 

\s意義,請參見perlre

+0

我認爲這樣的答案應該是獨立的。爲什麼不簡單解釋'\ s'的含義以及更多信息的鏈接? – Sparky

+0

爲什麼你會刪除所有空白來擺脫'\ r'(回車)? '$ Line =〜s/\ r // g';也就是說,choroba的答案可能是反正的根源(同樣的解決方案) –

+1

太棒了!這正是出錯的地方,我會記住將來:)(我在我的解決方案中使用了$ line =〜s/\ r // g)。乾杯! – blitzen