@temp = split(/\./, $_);
$val = $temp[1];
$val =~ s/\D//;
在Perl中编写单个语句而不是这三个语句的正确语法是什么?
($val = split(/\./, $_)[1]) =~ s/\D//;
给了我
test.pl第126行的语法错误,靠近“)[”
由于编译错误,test.pl的执行中止。
答案 0 :(得分:14)
以下是:
$_="ab123.ab456cd.78";
($val = (split(/\./))[1])=~ s/\D//g;
print $val;
(我冒昧地使用$_
中的隐式split
,并将/g
标记添加到s///
,因为从前面删除了一个非数字没有多大意义。)
现在你知道了,不要这样做。它不清楚,它不会显示你的内涵,而且很可怕。更清楚的是:
$val = (split /\./)[1];
$val =~ s/\D//g;
代码不只是为计算机编写的。它是为人们阅读而编写的,以便以后可以修改它。如果你没有为下一个人(可能在2个月内你)编写好的代码,那么下一个人将会有一个可怕的时间搞清楚你做了什么。
答案 1 :(得分:9)
列表切片看起来像(LIST)[LIST]
;你已经省略了()
部分。
($val = (split(/\./, $_))[1]) =~ s/\D//;
答案 2 :(得分:4)
这是:
(my $val = (split /\./)[1]) =~ s/\D//;
你的意思是\D+
吗?
测试:
#!perl
use warnings;
use strict;
$_ = "22.99grams";
(my $val = (split /\./)[1]) =~ s/\D+//;
print "$val\n";