2014-09-22 83 views
2

在嘗試清除Perl正則表達式中的只讀變量時遇到一些問題。 這裏是一個示例代碼。從perl正則表達式中清除只讀變量

while (<$input>) { 
    $cap = ""; 
    $_ =~ s/(.*)"(hello)(.*)"(.*)/$1$2$4/; 
    $cap = $2; 
    print "$_\n"; 
    print "captured $cap\n"; 
} 

這很好,直到它讀的行沒有你好。 由於某些原因,即使正則表達式不匹配任何東西,2美元仍然是「你好」。 我嘗試使用

$2 = ""; 

但我得到一個只讀值的

修改試圖

如何清除變量有什麼建議?

+0

只讀值不能被修改。這點很重要!請注意,如果不發生匹配,則不會發生替換。 – 2014-09-22 13:17:51

回答

4

而不是清除變量,檢查是否匹配成功:

while (<$input>) { 
    $cap = ""; 
    if ($_ =~ s/(.*)"(hello)(.*)"(.*)/$1$2$4/) { 
     $cap = $2; 
    } 
    print "$_\n"; 
    print "captured $cap\n"; 
} 
+1

有道理。謝謝! – user3668624 2014-09-22 13:21:59

+0

不客氣。繼續並接受答案,讓其他人更加明白問題已解決。 – toolic 2014-09-22 14:04:42