Perl简单搜索和替换

Perl简单搜索和替换,perl,Perl,我是个新手。很抱歉我正在尝试删除逗号。Perl-cgi.pm 我需要知道如何编写这个参数'item\u price'=>~s/\,//g; 我可以做这个$item\u price=~s/\,//g;而是宁愿消除对变量的转换。 如果我可以删除$,那就更好了。能做到吗?谢谢否。您只能对l值应用替换正则表达式,因为它需要回写更改后的字符串。l值是一个可以赋值的表达式 对于s///运算符,从: 除非使用/r选项,否则指定的字符串必须是标量变量、数组元素、哈希元素或对其中一个的赋值;也就是说,某种标量左值

我是个新手。很抱歉我正在尝试删除逗号。Perl-cgi.pm 我需要知道如何编写这个参数'item\u price'=>~s/\,//g; 我可以做这个$item\u price=~s/\,//g;而是宁愿消除对变量的转换。
如果我可以删除$,那就更好了。能做到吗?谢谢

否。您只能对l值应用替换正则表达式,因为它需要回写更改后的字符串。l值是一个可以赋值的表达式

对于s///运算符,从:

除非使用/r选项,否则指定的字符串必须是标量变量、数组元素、哈希元素或对其中一个的赋值;也就是说,某种标量左值。注意:/r修饰符似乎是Perl5.14中的一个新特性

子例程/方法调用不是l值

有3种可能的解决方法:

将子例程调用的结果分配给变量,并对该变量运行正则表达式

它的代码可能稍长,但它干净、可读,并且不容易出现错误。最佳解决方案

(my $param_cleaned = param('item_price') ) =~ s/,//;
升级到Perl 5.14并使用/r RegEx修饰符

[坏主意!!!]如果参数值存储在CGI.pm的内部,请进入CGI对象的内部存储,并将正则表达式应用于存储在对象中的值。你几乎不应该那样做


你可以,但我不确定这样会更有效率。像这样的方法应该会奏效:

join("", split(/,/, param('item_price')));

您可以在Perl 5.14中执行类似的操作,方法是:


这个问题不清楚,因为给出了无效的Perl来描述您想要的内容

听起来像是要获取值并在表达式中进行转换

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

哪里可以使用这些?任何可以使用表达式的地方

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

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

etc

请注意:我知道。它们是新的和实验性的,与这个问题无关。因此,这是一个评论,而不是答案的一部分。@ta-不客气。按照StackOverflow的工作方式,你可以通过点击答案旁边的复选标记接受最有用的答案来轻松表达你的感激之情,这样做你也会得到2分。这是一个很好的技巧,但并不容易阅读。
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