这个Perl代码有什么问题?

时间:2010-08-27 05:02:58

标签: perl

$value = $list[1] ~ s/\D//g;
  在try1.pl第53行的

语法错误,靠近“]〜”

     

由于编译错误,try1.pl的执行中止。

我正在尝试从@list的第二个元素中提取数字,并将其存储到$value

4 个答案:

答案 0 :(得分:7)

你的意思是=〜,而不是〜。 〜是一元按位否定运算符。

有两种方法可以做到这一点:

($value) = $list[1] =~ /(\d+)/;

两套parens都很重要;只有当有捕获括号时,匹配操作才会返回实际内容而不仅仅是成功的指示,然后仅在列表上下文中(由列表赋值运算符()=提供)。

或复制的常用习语然后修改:

($value = $list[1]) =~ s/\D//;

答案 1 :(得分:1)

也许您想要=~运营商?

P.S。请注意,$value不会被赋予结果字符串(字符串本身已更改)。 $value将被分配已完成的替换次数

答案 2 :(得分:1)

你在评论中说,试图摆脱非数字。看起来您正在尝试保留旧值并在新变量中获取修改后的值。 Perl的习惯用语是:

 ( my $new = $old ) =~ s/\D//g;

答案 3 :(得分:0)

并且希望\d igits不是非\D位数。并且有一个多余的s/替代算子,匹配更有意义。

if ($list[1] =~ /(\d+)/) {
    $value = $1;
}