Perl:语法错误“)[”。数组切片

时间:2011-10-06 12:28:33

标签: arrays perl slice

我是Perl的新手并且正在尝试一下。我有这段代码:

use Digest::MD5 'md5';
use Data::Dumper::Perltidy;

my $data = "x";
my $digest = md5($data);

# print first 6 elements
print Dumper map(ord, split(//, $digest))[0..5];

但是因语法错误而失败。我记得PHP有类似的问题,他们计划在未来的版本中解决这个问题。 Perl是否还有这个问题,或者它只是错误的方法吗?怎么会是正确的方法?

3 个答案:

答案 0 :(得分:10)

你需要将map括在parens中以便切片工作,例如:

print Dumper( ( map ord, split(//, $digest) )[0..5] );

答案 1 :(得分:7)

您正在尝试将下标应用于地图功能,而不是它的值。

print Dumper +( map(ord, split(//, $a) ))[0 .. 5];

会做你所期望的。请注意使用+符号来解决歧义。

答案 2 :(得分:2)

除了其他工作答案之外,请考虑您限制map语句的结果,当您通过限制拆分可以获得相同的结果时。这将传递较少的数据,以便ord映射,并为您的程序保存一些工作:

print Dumper map(ord, ( split(//, $digest) )[0..5] );

但是由于分裂内置了它,因此可以进一步简化为

print Dumper map(ord, split(//, $digest, 6) );