Perl: синтаксическая ошибка ") [".нарезка массивов - PullRequest
1 голос
/ 06 октября 2011

Я новичок в 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 ]

10 голосов
/ 06 октября 2011

Вам нужно заключить map в паренсы для нарезки на работу, например:

print Dumper( ( map ord, split(//, $digest) )[0..5] );
7 голосов
/ 06 октября 2011

Вы пытаетесь применить индекс к функции карты, а не к ее значениям.

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

Будет делать то, что вы ожидаете.Обратите внимание на использование знака + для устранения неоднозначности.

2 голосов
/ 06 октября 2011

В дополнение к другим рабочим ответам учтите, что вы ограничиваете результат оператора map, когда вы можете получить те же результаты, ограничив разделение. Это пропустит меньше данных для сопоставления с ord и сохранит вашу программу некоторой работы:

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

Но так как в split есть встроенная функция, ее можно упростить до

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