2013-10-03 59 views

回答

5

原始嘗試的問題是$old_string與替換運算符(因此它是將被修改的變量)綁定,然後替換運算符的返回值成爲匹配成功的次數。該匹配計數置於$new_string如果匹配失敗,則使用空字符串表示零計數。

您原來的嘗試將工作在最近的Perl版本支持/r修改,只有輕微的修改罰款:

my $new_string = $old_string =~ s/\r\n/\n/gr; 

這修飾符觸發的替換操作了「無損」模式,返回修改的字符串而不是計數。在Perl 5.14中引入了/r修飾符,並在perlop中進行了描述。

在舊版本的Perl,括號可用於操縱的優先級:

(my $new_string = $old_string) =~ s/\r\n/\n/g 

此語法評估my $new_string = $old_string第一,然後使用$new_string與替代結合。

2

你代上$old_string$new_string只包含多少換人做,所以使用括號改變運算的優先級,

(my $new_string = $old_string) =~ s/\r\n/\n/g; 
+0

與我所做的有何不同? – Jim

+1

@Jim的優先順序不同 –

4

my $new_string = $old_string =~ s/\r\n/\n/g 

返回的替換,而不是新字符串。要查看新字符串,替換後只需print $old_string


perlop

s/PATTERN/REPLACEMENT/msixpodualgcer 

搜索模式的字符串,如果找到,替換替換文本和回報換人的號碼進行該模式。 否則它返回false(特別是空字符串)。如果使用/ r(非破壞性)選項,那麼它將在字符串副本上運行替代,而不是返回替換次數,它將返回是否發生替換的副本。當使用/ r時,原始字符串永遠不會更改。即使輸入是對象或綁定變量,副本也將始終爲純字符串。

+0

但是,當我打印$ new_string時,我沒有看到0。我什麼都看不到 – Jim

+0

因爲當沒有匹配的時候'$ new_string'什麼也不返回! – psxls

相關問題