2011-11-16 18 views
7

il seguente frammento di codice preso da http://perldoc.perl.org/perlrequick.html#Search-and-replace mi dàPerl RegEx errore di sintassi

bareword trovato in cui l'operatore atteso alla linea blub.pl 2, nei pressi "s/cani/gatti/r"

Qual è il problema qui? Sto usando Perl 5.12.4 su Windows XP.

Codice:

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

Um, esattamente quello che dice? Qual è il 'r' alla fine? –

+0

@BrianRoach È il modificatore non distruttivo – NullUserException

+0

Erm, ok. COSÌ, avevo ragione ... ma solo perché non ho mai usato perl 5.14 :-D –

risposta

10

State guardando la documentazione per Perl 5.14. Questo esempio non appare in the documentation for Perl 5.12.

Si può vedere che è contrassegnato come una nuova funzione nel perl 5.13.2 delta.

È possibile copiare la variabile e poi modificarlo per ottenere lo stesso effetto nelle vecchie versioni di Perl.

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

Oppure si potrebbe usare l'idiomatica "one-liner":

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

Questo è un perfetto esempio del perché la gente non dovrebbe leggere i documenti di Perl sull'interweb. Dovresti invece leggere i documenti di Perl sul sistema su cui eseguirai perl. Allora non soffrirai mai il tondo della versione di disallineamenti! – tadmc

+3

@tadmc: puoi almeno (attentamente) selezionare la versione Perl per la documentazione [qui] (http://perldoc.perl.org/) – JRFerguson

2

sto usando la stessa versione (su Linux) e ottenere lo stesso errore più

Non quotati stringa "r" potrebbe entrare in conflitto con il futuro parola riservata

e funziona quando rimuovo r. Quel tutorial è dalla 5.14, potrebbe essere che la funzione r non fosse ancora implementata in 5.12.