$value = $list[1] ~ s/\D//g;
在try1.pl第53行的语法错误,靠近“]〜”
由于编译错误,try1.pl的执行中止。
我正在尝试从@list
的第二个元素中提取数字,并将其存储到$value
。
答案 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;
}