2011-03-08 219 views
2
chomp($myString); 
$myString =~ s/\///g; 

我可以代替這兩個與如何替換perl的空白

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

有什麼區別?請解釋。

+3

不,你不能 - 他們沒有做任何遠程類似。你想做什麼? – 2011-03-08 05:49:50

+0

chomp()only * defaults *去除換行符。 chomp()刪除的內容取決於$ /變量的值。 – tadmc 2011-03-08 13:31:04

回答

9

如果第一個代碼存在,那麼您的第一個代碼將在$ myString結尾處換行,然後刪除所有「/」字符。第二行代碼將刪除所有空白字符。有錯字嗎?

也許你想知道你可以取代這個:

chomp($myString); 
$myString =~ s/\s//g; 

與此:

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

如果是這樣的問題,那麼是的。由於換行符被視爲空白,第二個代碼示例執行上面兩行的作業。

+0

啊哈,所以我可以寫 $ myString =〜s/\ s // g; $ myString =〜s/\ /// g; 而不是寫所有三個 chomp($ myString); $ myString =〜s/\ /// g; $ myString =〜s/\ s // g; 我是否正確 – DarRay 2011-03-08 06:08:55

+0

@DarRay:是的,除非您更改了默認輸入記錄分隔符。 – ysth 2011-03-08 07:18:00

0

Chomp將在您的字符串末尾擺脫換行符,但不會刪除空格。典型的裝飾功能使用以下兩個置換系:

$string =~ s/^\s+//; 
$string =~ s/\s+$//; 

第一行你字符串的開始處刪除任何空間,並且該字符串的結束之後的第二去除空格。

1

從的perldoc chomp

格格從輸入記錄的結尾,當你擔心最後的記錄可能會丟失它的換行符刪除換行符。

在段落模式($/ = "")中,它刪除字符串中的所有尾隨換行符。 當在slurp模式($/ = undef)或定長記錄模式($/是一個整數或類似的參考,請參閱perlvar)chomp()不會刪除任何東西。

可以刪除領先,並從字符串結尾的空白樣,

$string =~ s{^\s+|\s+$}{}g