【发布时间】:2011-04-05 18:38:22
【问题描述】:
@temp = split(/\./, $_);
$val = $temp[1];
$val =~ s/\D//;
在 Perl 中编写单个语句而不是这三个语句的正确语法是什么?
($val = split(/\./, $_)[1]) =~ s/\D//;
给我
test.pl 第 126 行的语法错误,靠近 ")["
test.pl 的执行由于编译错误而中止。
【问题讨论】:
标签: perl
@temp = split(/\./, $_);
$val = $temp[1];
$val =~ s/\D//;
在 Perl 中编写单个语句而不是这三个语句的正确语法是什么?
($val = split(/\./, $_)[1]) =~ s/\D//;
给我
test.pl 第 126 行的语法错误,靠近 ")["
test.pl 的执行由于编译错误而中止。
【问题讨论】:
标签: perl
列表切片看起来像(LIST)[LIST];你省略了() 部分。
($val = (split(/\./, $_))[1]) =~ s/\D//;
【讨论】:
这里是:
(my $val = (split /\./)[1]) =~ s/\D//;
你的意思是\D+吗?
测试:
#!perl
use warnings;
use strict;
$_ = "22.99grams";
(my $val = (split /\./)[1]) =~ s/\D+//;
print "$val\n";
【讨论】:
/g dos 工作)。
方法如下:
$_="ab123.ab456cd.78";
($val = (split(/\./))[1])=~ s/\D//g;
print $val;
(我冒昧地在split 中使用了隐式$_,并将/g 标签添加到s///,因为从前面删除一个非数字没有多大意义。)
现在你知道了,不要这样做。看不清楚,看不出来你的本意,太可怕了。更清楚的是:
$val = (split /\./)[1];
$val =~ s/\D//g;
代码不仅仅是为计算机编写的。它是为人们阅读而编写的,以便他们以后可以修改它。如果你不为下一个人(可能在 2 个月内你)编写好的代码,那么下一个人将很难弄清楚你做了什么。
【讨论】: