Это не действительный Perl как написано:
@{$labels->{$set}->{"train"}->{"negative"}} = (@{$labels->{$set}->{"train"}->{"negative"}};
^
Syntax error - open parenthesis without a matching close parenthesis
Если вы игнорируете открытые скобки, то выражения LHS и RHS идентичны; он присваивает себе значение массива. Обозначения стрелок ->
и {}
в основном означают, что вы имеете дело с массивом ref в конце хеш-ссылки на хеш-ссылку на хеш-ссылку или около того. Это в лучшем случае неприятный кусок кода, который нужно понимать, но структура может иметь больше смысла в более широком контексте всей программы (и вся программа будет значительно больше, поэтому я не рекомендую публиковать ее здесь) .
Дважды проверьте свою копию и пасту. Если это на самом деле в сценарии Perl, то его невозможно скомпилировать, тем более выполнить, поэтому вам придется разобраться, как и почему эта строка не работает.
Пересмотренное выражение имеет RHS:
(@{$labels->{$set}->{"train"}->{"negative"}}, splice(@shuffled, 0, 2000));
круглые скобки предоставляют контекст массива или списка; первый член - исходный массив; второе слагаемое является результатом применения splice
к массиву @shuffled
. Таким образом, splice
удаляет пару тысяч элементов (2001?) Из массива @shuffled
, и выражение в целом добавляет удаленные элементы в конец массива, идентифицированного комплексным выражением на LHS.
Вероятно, это было бы более эффективно записано как:
push @{$labels->{$set}->{"train"}->{"negative"}}, splice(@shuffled, 0, 2000);
Он также более экономичен при наборе текста и намного более экономичен при работе с клетками головного мозга.