2011-12-13 85 views
5

;用作語句分隔符,因此在語句末尾放置多個;可以,因爲它只是添加空語句。語句末尾的Perl分號

我碰到這個代碼在年底有多個;但刪除它們導致錯誤:

$line =~s;[.,]$;;; 

應該是相同

$line =~s;[.,;]$; 

,但事實並非如此。這是怎麼回事?

+2

在第二條語句中,您做的不僅僅是刪除分號,而是在中間添加了一個分號。 –

+5

[s //:「任何非空白分隔符都可以代替斜線。」](http://perldoc.perl.org/perlop.html#s%2fPATTERN%2fREPLACEMENT%2fmsixpodualgcer) –

+4

很明顯,無論誰寫它認爲它有高娛樂價值 – Zaid

回答

7

在代碼中只有最後;語句分隔符。其他人是正則表達式分隔符,其中替代運算符采取。一個更好的方式來寫是這樣的:

$line =~s/[.,]$//; 

因爲你必須在你的語句中的語句分隔符和正則表達式的分隔符,你不能刪除任何尾隨;

13

在您提供的片段中;被用作search-n-replace正則表達式的分隔符。

$line =~s;[.,]$;;; 

相當於

$line =~ s/[.,]$//; 
+4

只是要清楚 - 是的,這是合法的。不,你應該永遠不要在你的代碼中這樣做,除非你想要一個瘋狂的精神病患者把你的頭撞了進來。而且,我的意思是下一個開發者必須維護你的代碼。 – DVK

3

分號不是普遍的聲明分隔器;它也可以是一個帶引號的字符串或正則表達式分隔符。或者甚至是一個變量名稱,就像Abigail在這個經典的JAPH中所寫的那樣,標題是「事情不像他們看起來那樣」。

$;        # A lone dollar? 
=$";       # Pod? 
$;        # The return of the lone dollar? 
{Just=>another=>Perl=>Hacker=>} # Bare block? 
=$/;       # More pod? 
print%;       # No right operand for %? 
相關問題