Perl присваивает элементам массива ключ, определенный пользователем - PullRequest
0 голосов
/ 27 июня 2018

Ниже приведен код, в котором мне нужна помощь.

#!/usr/bin/perl -w
use strict;

use Data::Dumper;

my @arrayElements = ('Array Functions');
print join(", ", @arrayElements);
### Output => Array Functions

my %hashElements = ();

Я хочу назначить содержимое @arrayElements на $hashElements{Item} Пропустил некоторые основные концепции или попытался ошибиться и некоторое время боролся с этим.

1 Ответ

0 голосов
/ 27 июня 2018

Кажется, вам не хватает некоторых основных понятий 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...