perl s / this / that / r ==> "Bareword найден там, где ожидал оператор" - PullRequest
6 голосов
/ 20 декабря 2011

Perl docs Рекомендую:

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

Однако я получаю эту ошибку:

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

Это относится к модификатору r, без него код работает. Однако я не хочу изменять $bar. Я могу, конечно, заменить

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

с

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

Есть ли лучшее решение?

Ответы [ 2 ]

17 голосов
/ 20 декабря 2011

Как писал Руах, /r является новым в Perl 5.14. Однако вы можете сделать это в предыдущих версиях perl:

(my $foo = $bar) =~ s/this/that/;
2 голосов
/ 20 декабря 2011

Нет лучшего решения, нет (хотя я обычно пишу его в одну строку, поскольку s/// по сути служит частью процесса инициализации:

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

).Кстати, причиной вашего сообщения об ошибке почти наверняка является то, что вы используете версию Perl, которая не поддерживает флаг /r.Этот флаг был добавлен совсем недавно, в Perl 5.14.Возможно, вам будет проще разработать с использованием документации для вашей собственной версии;например, http://perldoc.perl.org/5.12.4/perlop.html, если вы используете Perl 5.12.4.

...