2017-09-11 53 views
1

我不明白爲什麼perl chomp沒有刪除我的字符串周圍的空白。我甚至試過打電話給格格兩次,例如,使用bash:chomp爲什麼不刪除我的字符串周圍的空白?

$ perl -e 'use 5.22.4; chomp(my $extra=" lol "); chomp($extra); say "<$extra>"' 
<lol> 

我真的有望獲得

<lol> 
+5

你爲什麼期待?請閱讀該功能的文檔。 – Mat

+0

試着在這裏修剪空白處:http://www.perlmonks.org/?node_id=522531 – AntonH

+2

*爲什麼chomp不會刪除我的字符串周圍的空白?*因爲那不是'chomp()'所做的:-) –

回答

7

的Chomp僅刪除行結束(可以用$/變量被設置)從字符串的末尾開始。它不修剪字符串。 Perl沒有內置的修剪功能。我通常拼出兩個換人,而不是:

s/^\s+//, s/\s+$// for $string; 

延伸閱讀:

+1

global開關在這裏可能更有用「$ extra =〜s/^ \ s + | \ s + $ // g」 – hoffmeister

+0

[perl5i實現](https://metacpan.org/pod/distribution/perl5i/lib/perl5ifaq.pod #如何-DO-I-帶空格關閉一個字符串?) – daxim

6

要刪除所有空白:

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

左裝飾:

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

右微調:

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

左和右裝飾:

$string =~ s/^\s+|\s+$//g 

然後我們就可以建也修剪類函數。這有助於更大的腳本,您不希望每次都寫完整的替換字符串,我們只寫一次,然後使用該函數完成工作。

這個簡單的函數可以在任何腳本用作trim($string);

sub trim { 
    $_[0] =~ s/^\s+|\s+$//g; 
} 

類似地使用空白字符的完整條。

sub full_strip { 
    $_[0] =~ s/\s+//g; 
} 
在腳本

use strict; 
use warnings; 
my $string = " this is line with leading and trailing whitespaces "; 
my $string2 = "   another one of those lines "; 

trim($string); 
trim($string2); 

print "$string\n"; 
print "$string2\n"; 

full_strip($string); 
full_strip($string2); 

print "$string\n"; 
print "$string2\n"; 


sub trim { 
    $_[0] =~ s/^\s+|\s+$//g; 
    } 

sub full_strip { 
    $_[0] =~ s/\s+//g; 
    } 
0
$string=~s/^\s+|\s+$//g; 

這將爲您要刪除開始和結束的空格的一般串正常工作。

相關問題