2011-11-16 12 views
7

następujący fragment kodu pochodzi z http://perldoc.perl.org/perlrequick.html#Search-and-replace daje miPerl RegEx

gołe słowo, znaleźć tam, gdzie oczekuje na blub.pl operatora linii nr 2, w pobliżu "s/psy/koty/r"

Na czym polega problem? Używam Perla 5.12.4 na Windows XP.

Kod:

$x = "I like dogs."; 
$y = $x =~ s/dogs/cats/r; 
print "$x $y\n"; 
+0

Um, dokładnie to, co mówi? Co to jest 'r' na końcu? –

+0

@BrianRoach To nieniszczący modyfikator – NullUserException

+0

Erm, ok. Tak, miałem rację ... ale tylko dlatego, że nigdy nie używałem perl 5.14 :-D –

Odpowiedz

10

Szukasz w dokumentacji Perl 5.14. Ten przykład nie pojawia się w the documentation for Perl 5.12.

Widać, że jest oznaczony jako nowa funkcja w perl 5.13.2 delta.

Można skopiować zmienną i , a następnie zmodyfikować, aby uzyskać ten sam efekt w starszych wersjach Perla.

$x = "I like dogs."; 
$y = $x; 
$y =~ s/dogs/cats/; 
print "$x $y\n"; 

Albo można użyć idiomatyczne "one-liner":

$x = "I like dogs."; 
($y = $x) =~ s/dogs/cats/; 
print "$x $y\n"; 
+3

Jest to doskonały przykład dlaczego ludzie nie powinni czytać dokumentów Perla w interweb. Powinieneś zamiast tego czytać dokumenty Perla w systemie, w którym będziesz uruchamiał Perla. Wtedy nigdy nie będziesz cierpieć z powodu niedopasowania wersji! – tadmc

+3

@adadmc: Możesz przynajmniej (dokładnie) wybrać wersję Perla dla dokumentacji [tutaj] (http://perldoc.perl.org/) – JRFerguson

2

Używam tej samej wersji (Linux) i otrzymuję ten sam błąd plusa

niecytowany ciąg "r" może kolidować z przyszłym zarezerwowanym słowem

i działa po usunięciu r. Ten samouczek pochodzi z wersji 5.14, być może funkcja r nie została jeszcze zaimplementowana w wersji 5.12.