2012-09-14 10 views
5

Il Perl doc stati:Come utilizzare l'indicatore/r nella regex di Perl?

e Evaluate 'replacement' as an expression 
r Return substitution and leave the original string untouched. 

sono bandiere disponibili per essere utilizzate nei modelli di sostituzione. Quando passo il flag r al mio pattern di sostituzione, viene interpretato come un errore di sintassi. Sto eseguendo Perl 5.8.8. È possibile che non sia supportato nella mia versione di Perl? Inoltre, qualcuno può fornire un esempio funzionante di come usare la bandiera e come chiamare la sostituzione appena creata?

risposta

15

Forse dovresti leggere i documenti per 5.8.8, quindi?/r è stato aggiunto a 5.14!

In 5.8.8, si può fare l'equivalente di

s/foo/bar/r 

con

do { (my $s = $_) =~ s/foo/bar/; $s } 

usi campione di s /// r:

print "abba" =~ s/b/!/rg;   # Prints a!!a 

my $new = $old =~ s/this/that/r; # Leaves $old intact. 

my $trimmed = $val =~ s/^\s+//r =~ s/\s+\z//r; 
my $trimmed = (($val =~ s/^\s+//r) =~ s/\s+\z//r); # Same as previous 
+0

Potresti mostra come chiamarlo in 5.14. Sono confuso su come restituisce una variabile diversa, ma devi ancora annotare la variabile per eseguirla. Ad esempio: $ var = ~ s/this/that/r; Dove viene salvata la nuova variabile? – user1671989

+0

@ user1671989, Viene restituito. «' Stampa "abc" = ~ s/b /!/Rg; '» stampa «' a! C' ». – ikegami

+0

Quindi se viene restituito e l'ho chiamato come $ var = ~ s/this/that/r; effettivamente sovrascrivere $ var? Come posso eseguirlo su $ var e restituirlo a $ new_var? Mi spiace per essere un noob, avendo problemi a sistemarmi la testa. – user1671989

Problemi correlati