Perl простой поиск и замена - PullRequest
       0

Perl простой поиск и замена

0 голосов
/ 16 февраля 2012

Я новичок.Сожалею.Я пытаюсь удалить запятые.Perl cgi.pm
Мне нужно знать, как написать этот параметр ('item_price' => ~ s / \, // g);
Я могу сделать это $ item_price = ~ s / \, // g;но скорее исключит преобразование в переменную.
Что было бы еще лучше, если бы я мог включить удаление $.Это можно сделать?Спасибо

Ответы [ 4 ]

5 голосов
/ 16 февраля 2012

Нет.Вы можете применять только RegEx для замены к l-значению (выражению, которому можно присвоить значение TO), так как ему нужно записать измененную строку.

С perldoc perlopдля оператора s///:

Если не используется параметр / r, указанная строка должна быть скалярной переменной, элементом массива, элементом хеш-функции или присваиванием одному из них;то есть какое-то скалярное значение .(Примечание: модификатор /r кажется новой функцией в Perl 5.14).

Вызов подпрограммы / метода НЕ является значением l.

Есть 3Возможные обходные пути:

  • Назначить результаты вызова подпрограммы для переменной и запустить RegEx для переменной.

    Это может быть немного более длинный код, но он чистый,читаемый, и не подвержен ошибкам.Лучшее решение.

    (my $param_cleaned = param('item_price') ) =~ s/,//;
    
  • Обновите до Perl 5.14 и используйте /r Модификатор RegEx.

  • [ПЛОХАЯ ИДЕЯ !!!] Еслизначение параметра хранится внутри в CGI.pm, перейдите во внутреннее хранилище объекта CGI и примените регулярное выражение к значению, хранящемуся в объекте.Вы почти никогда не должны делать это!

3 голосов
/ 16 февраля 2012

Вы можете сделать что-то подобное в Perl 5.14 с флагом return :

my $result = param( 'item_price' ) =~ s/,//gr;
2 голосов
/ 16 февраля 2012

Можно, но я не уверен, что это будет более эффективно. Примерно так должно работать:

join("", split(/,/, param('item_price')));
1 голос
/ 16 февраля 2012

Вопрос неясен (из-за неверного Perl в качестве описания того, что вы хотите).

Похоже, вы хотите получить значение и преобразовать его внутри выражения.

do {
   my $item_price = param('item_price');
   $item_price =~ s/,//g;
   $item_price
}

или

use List::MoreUtils qw( apply );
apply { s/,//g } param('item_price')

или

# Requires 5.14
param('item_price') =~ s/,//gr

Где их можно использовать?Везде можно использовать выражение.

# Print out the transformed value
print( param('item_price') =~ s/,//gr );

# Change the param itself
param( 'item_price', param('item_price') =~ s/,//gr );

etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...