【发布时间】:2010-08-27 05:02:57
【问题描述】:
$value = $list[1] ~ s/\D//g;
try1.pl 第 53 行,“] ~”附近的语法错误
try1.pl 的执行由于编译错误而中止。
我正在尝试从@list 的第二个元素中提取数字,并将其存储到$value。
【问题讨论】:
标签: perl
$value = $list[1] ~ s/\D//g;
try1.pl 第 53 行,“] ~”附近的语法错误
try1.pl 的执行由于编译错误而中止。
我正在尝试从@list 的第二个元素中提取数字,并将其存储到$value。
【问题讨论】:
标签: perl
你的意思是=~,不是~。 ~ 是一元按位否定运算符。
有几种方法可以做到这一点:
($value) = $list[1] =~ /(\d+)/;
两组括号都很重要;仅当存在捕获括号时,匹配操作才会返回实际内容,而不仅仅是成功的指示,并且仅在列表上下文中(由列表分配运算符 ()= 提供)。
或者是复制然后修改的常见习语:
($value = $list[1]) =~ s/\D//;
【讨论】:
也许您想要=~ 运算符?
附:请注意,$value 不会被分配结果字符串(字符串本身已就地更改)。 $value 将获得替换的次数
【讨论】:
您在评论中说试图摆脱非数字。看起来您正在尝试保留旧值并在新变量中获取修改后的值。 Perl 的成语是:
( my $new = $old ) =~ s/\D//g;
【讨论】:
并且想要\digits 而不是非\Digits。并且有一个多余的 s/ubstitute 运算符,匹配更有意义。
if ($list[1] =~ /(\d+)/) {
$value = $1;
}
【讨论】:
$100,000 之类的东西