我是新手。抱歉。我正在尝试删除逗号。 Perl cgi.pm
我需要知道如何写这个参数('item_price'=> ~s / \,// g);
我可以这样做$ item_price = ~s / \,// g;但宁愿消除转换为变量
如果我可以包括删除$,那会更好。可以吗?感谢
答案 0 :(得分:5)
没有。您只能将替换RegEx应用于l值(可以赋值TO的表达式),因为它需要写回更改后的字符串。
来自s///
/r
运营商:
除非使用/ r选项,否则指定的字符串必须是标量变量,数组元素,哈希元素或其中一个的赋值;也就是某种标量左值。 (注意:
(my $param_cleaned = param('item_price') ) =~ s/,//;
修饰符似乎是Perl 5.14中的新功能。)
子程序/方法调用不是l值。
有3种可行的解决方法:
将子程序调用的结果分配给变量,并对变量运行RegEx。
代码可能稍长,但它干净,易读且不容易出错。最佳解决方案。
/r
升级到Perl 5.14并使用{{1}} RegEx修饰符。
[BAD IDEA !!!]如果param值存储在CGI.pm内部,则进入CGI对象的内部存储并将正则表达式应用于存储在对象中的值。你几乎不应该这样做!
答案 1 :(得分:3)
你可以在Perl 5.14中使用return flag:
执行类似的操作my $result = param( 'item_price' ) =~ s/,//gr;
答案 2 :(得分:2)
你可以,但我不确定它会更有效率。这样的事情应该有效:
join("", split(/,/, param('item_price')));
答案 3 :(得分:1)
问题不明确(由于将无效的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