Perl简单搜索和替换

时间:2012-02-16 15:28:57

标签: perl

我是新手。抱歉。我正在尝试删除逗号。 Perl cgi.pm
我需要知道如何写这个参数('item_price'=> ~s / \,// g);
我可以这样做$ item_price = ~s / \,// g;但宁愿消除转换为变量 如果我可以包括删除$,那会更好。可以吗?感谢

4 个答案:

答案 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