2016-02-07 149 views
-1

我有以下代碼:爲什麼我仍然會換行?

open INPUT, "input.txt"; 
my $line = ""; 
while (<INPUT>) 
{ 
     $line = $_; 
     $line =~ s/\s+^//; 
     print $line; 
} 

但產量仍包括了所有的換行。我也試過\v\R

+0

的可能的複製。[Perl的:函數修剪串前後空白](http://stackoverflow.com/questions/4597937/perl-function-to-trim-string-leading-and-trailing-空格) – JGreenwell

+0

@JGreenwell H ow可能是重複的嗎?我已經提供了一段代碼摘錄,其中明確包含了以下由ruakh指出的錯誤。 – CJ7

+0

因爲你的實際問題是我如何刪除尾部空白和解決你的問題的正則表達式在鏈接問題的答案(還包括關於chomp與正則表達式的註釋) – JGreenwell

回答

2

/\s+^/意味着「一個或多個空格字符開始的字符串之前」 —所以它永遠不會匹配。

如果你的目標是消除尾隨空白字符,那麼你需要$而不是^

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

(如果你的目標其實只是刪除尾隨換行符,那麼你或許應該使用the built-in chomp function

+0

'chomp'在我嘗試時不工作 – CJ7

+5

@ CJ7:就是這樣。 。 。不是一個非常有用的陳述。我的意思是,顯然'chomp'起作用。這並不像它一直被打破,也沒有人注意到過。如果你遇到困難,你需要提供更多關於你如何使用它以及發生了什麼問題的信息。 – ruakh

+0

我使用'chomp $ line'而不是上面的正則表達式行,它仍然輸出所有換行符。 – CJ7