Кажется, вам не хватает некоторых основных понятий Perl (или программирования в целом). Если вы изучаете Perl через книгу или онлайн-учебник, я предлагаю вам перечитать главы, посвященные массивам и хэшам.
Давайте посмотрим, что здесь происходит. У вас есть:
@arrayElements
, который является массивом . Содержит список с одним элементом, строка 'Array Functions'
.
%hashElements
, что является хешем . Это пусто.
$hashElements{Item}
, что является скалярным значением. Вы хотите установить это.
Вы говорите, что хотите, чтобы $hashElements{Item}
имел значение 'Array Functions'
, которое у вас есть в качестве первого элемента в вашем массиве @arrayElements
.
$hashElements{Item} = $arrayElements[0];
И это все. И $hashElements{Item}
, и $arrayElements[0]
являются скалярными значениями. Вот почему их сигил (знак спереди) изменяется с @
(для массива) или %
(для хэша) на $
. Вы можете различить, было ли значение получено из хеша или массива по скобкам, используемым для доступа к элементам. []
для массивов, {}
для хэшей.
Вы не можете сделать следующее, хотя.
$hashElements{Item} = @arrayElements;
Поскольку $hashElements{Item}
является скаляром, то, что справа от назначения, будет обрабатываться в скалярном контексте . Массив в скалярном контексте преобразуется в число элементов в массиве, поэтому для него присваивается 1
. Это не то, что вы хотите.
Вы должны действительно прочитать больше об этом, а также выбрать лучшие имена для ваших переменных. Ваш пример очень запутанный. В общем, мы не делаем $CamelCase
для имен переменных в Perl, но вместо этого используем $snake_case
, который легче читать и печатать.
Взгляните на следующие ресурсы, чтобы узнать больше о концепциях, которые я упомянул выше.
Perl Maven , perldata , perldsc