在Perl中的一个语句中拆分并分配

时间:2010-08-30 13:37:27

标签: perl

@temp = split(/\./, $_);
$val = $temp[1];
$val =~ s/\D//;

在Perl中编写单个语句而不是这三个语句的正确语法是什么?

($val = split(/\./, $_)[1]) =~ s/\D//;

给了我

  

test.pl第126行的语法错误,靠近“)[”

     

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

3 个答案:

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