2011-12-13 12 views
5

Parametr ; jest używany jako separator instrukcji, więc umieszczenie wielu ; na końcu instrukcji jest poprawne, ponieważ dodaje puste instrukcje.Średnik Perla na końcu instrukcji

natknąłem się na ten kod, który ma wiele ; na końcu, ale usuwając je powodując błędy:

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

powinien być taki sam jak

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

ale tak nie jest. Co się dzieje?

+2

Zrobiłeś więcej niż tylko usuwanie średników w drugim wyciągu, dodałeś jeden w środku. –

+5

[s //: "Każdy ogranicznik bez białych znaków może zastąpić ukośniki."] (Http://perldoc.perl.org/perlop.html#s%2fPATTERN%2fREPLACEMENT%2fmsixpodualgcer) –

+4

Najwyraźniej ten, kto to napisał, uważał, że ma wysoka wartość rozrywkowa – Zaid

Odpowiedz

7

w kodzie tylko ostatni ; jest oświadczenie ogranicznik. Pozostałe to ograniczniki regex, które ma operator zastępowania. Lepszym sposobem jest napisać:

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

Ponieważ trzeba mieć separator oświadczenie i regex ograniczniki w swoim oświadczeniu, że nie może odrzucić wszystkie z tylnym ;

13

w podanym przez ciebie fragmencie ; jest używany jako ogranicznik dla wyrażenia regularnego "szukaj-i-zamień".

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

jest równoważna

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

Tylko dla jasności - tak, jest to zgodne z prawem. Nie, nigdy nie powinieneś robić tego w swoim kodzie, chyba że chcesz, żeby szalejący psychopata wpadł ci w głowę. I szalejąc za psychopatą mam na myśli następnego programistę, który musi zachować twój kod. – DVK

3

średnik nie jest powszechnie oświadczenie separator; może to być także cudzysłowy w cudzysłowie lub ogranicznik regex. Lub nawet nazwę zmienną, jak w tym klasycznym tytule JAPH autorstwa Abigail, zatytułowaną "Rzeczy nie są tym, na co wyglądają".

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