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

Arrays Perl:语法错误(“)[“数组切片”,arrays,perl,slice,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是否仍然存在

我是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是否仍然存在这个问题,或者仅仅是错误的方法?正确的方法是什么?

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

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

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

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

您试图将下标应用于map函数,而不是其值

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

将按您的期望执行。请注意使用
+
符号以解决歧义。

您试图将下标应用于map函数,而不是其值

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

将按照你的期望去做。注意使用<代码> +代码>符号来解决歧义。

< P>除了其他工作答案之外,考虑到你限制了<代码> map 语句的结果,当你可以通过限制拆分得到相同的结果时,这将通过更少的数据来映射到<代码> ORD < /代码>并保存。您的程序有一些作用:

print Dumper map(ord, ( split(//, $digest) )[0..5] );
但由于split内置了此功能,因此可以进一步简化为

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

除了其他工作答案之外,还考虑限制“代码> map /<代码>语句的结果,当您可以通过限制拆分得到相同的结果时,这将通过更少的数据来映射<代码> ORD < /Cord>,并保存您的程序一些工作:

print Dumper map(ord, ( split(//, $digest) )[0..5] );
但由于split内置了此功能,因此可以进一步简化为

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

这仍然因为语法错误而失败?你确定吗?这是什么时候引入的?哎哟,我的错。我还错过了
转储程序
函数的参数。这仍然因为语法错误而失败?你确定吗?这是什么时候引入的?哎哟,我的错。我还错过了
转储程序
函数的参数。我要说得非常清楚:map不是惰性函数吗?在Perl 5中,
map
为每个输入值执行的表达式或块可能包含副作用。为了确保任何副作用尽可能保持确定性,
map
在所有输入值上按顺序执行。Perl几乎没有希望被禁用当代码“<代码> <代码>将不会产生副作用并将其转换为懒惰<代码> map < /C>时,请考虑Perl允许重写<代码>和核心::Global::ORD 这会导致调用<代码> ORD < /代码>产生副作用。ns?在Perl 5中,
map
为每个输入值执行的表达式或块可能包含副作用。为了确保任何副作用尽可能具有确定性,
map
按顺序在所有输入值上串行执行。Perl几乎不可能识别
map
何时没有副作用CTS并将其转换成一个懒惰的<代码> MAP>代码,请考虑Perl允许重写<代码>和核心::Global::ORD < /Cord>,这可能导致调用<代码> ORD < /Cord>有副作用。