2011-12-20 5 views
6

Perl docs raccomandano questo:perl s/presente/che/r ==> "bareword trovato in cui l'operatore prevede"

$foo = $bar =~ s/this/that/r; 

Tuttavia, ottengo questo errore:

Bareword found where operator expected near 
    "s/this/that/r" (#1) 

Questo è specifico per il modificatore r, senza che il codice funzioni. Tuttavia, non desidero modificare $bar. posso, ovviamente, sostituire

my $foo = $bar =~ s/this/that/r; 

con

my $foo = $bar; 
$foo =~ s/this/that/; 

C'è una soluzione migliore?

+2

È in esecuzione su Perl 5.14 ...? (Assicurati di avere un 'require v5.14;' nella tua intestazione ...) – BRFennPocock

+0

Modifica: apparentemente 'use v5.13.2' è il livello minimo per' s /// r'. – BRFennPocock

+3

Cosa abbiamo imparato qui? Abbiamo appreso che dovremmo leggere i documenti * forniti con * perl distribuzione piuttosto che leggere documenti da "da qualche parte sul web". :-) – tadmc

risposta

17

Come ha scritto ruakh, /r è nuovo in perl 5.14. Tuttavia è possibile farlo nelle versioni precedenti di perl:

(my $foo = $bar) =~ s/this/that/; 
2

Non c'è soluzione migliore, no (anche se di solito scrivere su una riga, poiché la s/// in sostanza servendo come parte del processo di inizializzazione:

my $foo = $bar; $foo =~ s/this/that/; 

). A proposito, il motivo del tuo messaggio di errore è quasi certamente che stai utilizzando una versione di Perl che non supporta il flag /r. Quella bandiera è stata aggiunta abbastanza di recente, in Perl 5.14. Potresti trovare più facile sviluppare utilizzando la documentazione per la tua versione; ad esempio, http://perldoc.perl.org/5.12.4/perlop.html se sei su Perl 5.12.4.

Problemi correlati