Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Perl
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2017, 12:31   #1
kkonstant
Новичок
Джуниор
 
Регистрация: 26.04.2017
Сообщений: 2
По умолчанию Неизвестная мне структура ${"CG_ID".$i}

Нужно изменить чужой код. Внезапно столкнулся вот с такой структурой.
${"CG_ID".$i} = $AllCGsIDs[$ii]{"ID"}; - так делают инициализацию.
Этот CG_ID используют как глобальный массив, судя по использованию. Но Dumper его не печатает, передать его в функцую не получается. Только использовать вот в такой вот форме. Что это такое, как оно называется и как с ним работать?
Спасибо.

Последний раз редактировалось kkonstant; 26.04.2017 в 12:34.
kkonstant вне форума Ответить с цитированием
Старый 27.04.2017, 14:12   #2
svsh2016
Форумчанин
 
Регистрация: 16.06.2015
Сообщений: 100
По умолчанию

Слева начальный символ $-признак скалярной переменной,далее должно идти её имя. Вместо имени -блок,то есть выражение внутри блока интерпретируется как ссылка.Происходит разыменование ссылки.
Справа мы имеем разыменование ссылки на массив хэшей(Array of Hashes,AoH)
Опубликуйте ваш код целиком.
Наличие любой ссылки можно проверить функцией ref()

Последний раз редактировалось svsh2016; 27.04.2017 в 16:18.
svsh2016 вне форума Ответить с цитированием
Старый 30.04.2017, 17:21   #3
kkonstant
Новичок
Джуниор
 
Регистрация: 26.04.2017
Сообщений: 2
По умолчанию

Да справа обычный массив хешей, а вот то что слева очень непонятно.
Я хочу перестать в этой программе вообще пользоваться глобальными переменными, но не знаю как эту конструкцию начать отправлять в функции. Инициализация её выглядит так.
my @AllCGsIDs = REST_GetAllCGsIDs(); // содержит массив хешей всех существующих имён и их ID
$AllCGsIDsRecords = scalar(@AllCGsIDs);
my @CG_Name = ("CG001","CG002","CG003");#содер жит имена, которые будут в последствии обработаны.
for (my $i=1; $i<$AllCGsIDsRecords; $i++) {
for (my $ii=0; $ii<=$AllCGsIDsRecords-1; $ii++){
if ($CG_Name[$i] eq $AllCGsIDs[$ii]{"Name"}) {
${"CG_ID".$i} = $AllCGsIDs[$ii]{"ID"};

}
}
}
kkonstant вне форума Ответить с цитированием
Старый 15.05.2017, 18:40   #4
svsh2016
Форумчанин
 
Регистрация: 16.06.2015
Сообщений: 100
По умолчанию

Добавлю к своему предыдущему сообщению(не посмотрел,что Вы ответили): у Вас слева от знака равенства происходит
разыменование символической ссылки $link_1 (в фигурных скобках(блоке) имеются кавычки):

Код:
$link_1="CG_ID".i; #Символическая ссылка
Разыменующий префикс $ и фигурные скобки-это стандартные атрибуты для разыменования:
${link_1}
В результате слева от знака равенства мы получаем ,например для индекса1 (аналогично для остальных индексов в цикле)
$CG_ID1=
Справа от знака равенства Вам все понятно
Советую посмотреть для справки библию "Программирование на Perl" Том Кристиансен,брайан д фой,Ларри Уолл,Джон Орвант,2014,с359-361
svsh2016 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Убрать папки "Pictures", "Music", "Видео", "Downloads" из "МОЙ КОМПЬЮТЕР" Бахтиёр1916 Windows 1 05.04.2017 12:53
Нужно пояснить/прокомментировать код программы, или коды функций "Добавить" "Удалить" "Обновить(редактировать" "Поиск" "Период") ZIRASS PHP 4 15.06.2016 14:23
Как вставить кнопку "Поделится" или "мне нравится" в phpbb3 borecc PHP 1 07.03.2011 13:44
"а" и "б" не хотят посчитаться, помогите мне их посчитать) Лука Microsoft Office Excel 5 10.12.2010 02:43