Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> То ли массив, то ли хэш? А вдруг ссылка? 
:(
    Опции темы
Vavilen
Дата 8.7.2009, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 18.1.2009

Репутация: нет
Всего: нет



Наткнулся на чужой код. Вот его кусок:
@{ $self->_session->{ $args{section} } }{ keys %{ $args{data} || {} } } 
        = values %{ $args{data} || {} };
объясните, плиз, что за структура данных и что с ней происходит в этой строке?
PM MAIL   Вверх
arto
Дата 8.7.2009, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



ссылку на хеш заполняют
PM MAIL ICQ   Вверх
mvsgt
Дата 9.7.2009, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 27.3.2009

Репутация: 1
Всего: 1



Основа этой строки - операция с хэшем. Пример: создаём элементы хэша с именами и значениями

Код

use Data::Dumper;
my %hash;
@hash{ 1,2,3 } = ('a','b','c');
print Dumper(\%hash);

Выводит 

$VAR1 = {
          '1' => 'a',
          '3' => 'c',
          '2' => 'b'
        };




Код

@{ $self->_session->{ $args{section} } }{ keys %{ $args{data} || {} } } = values %{ $args{data} || {} };

$self->_session->{ $args{section} } - hashref
keys %{ $args{data} || {} } -  ключи хэша
$args{data} || {} - значения хэша



Это сообщение отредактировал(а) mvsgt - 9.7.2009, 18:34
PM MAIL   Вверх
DaemonSuw
Дата 9.7.2009, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 11.3.2008

Репутация: 3
Всего: 3



Все таки мне не все понятно в данной конструкции
Код

@{ $self->_session->{ $args{section} } }{ keys %{ $args{data} || {} } } 
        = values %{ $args{data} || {} };


1. $self->_session->{ $args{section} - тут вроде все ясно - вызов процедуры которая возвращает ссылку на хешь и по которой мы берем значения ключа

А вот что не понятно:
2. keys %{ $args{data} || {} - данная конструкция возвращает список ключей хеша по ссылке, которая хранилась в другом хеше, а именно в $args{data} - верно?
3. values %{ $args{data} || {} } - делает тоже самое только с значения ключей хеша, который храниться по ссылке в скаларе $args{data}.

В конце получаем:
@{скаляр}{список} = список - и что это значит?

 smile 


Это сообщение отредактировал(а) DaemonSuw - 9.7.2009, 18:41
PM MAIL ICQ   Вверх
shamber
Дата 9.7.2009, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Цитата(DaemonSuw @  9.7.2009,  18:38 Найти цитируемый пост)
1. $self->_session->{ $args{section} - тут вроде все ясно - вызов процедуры которая возвращает ссылку на хешь

а почему процедуры? Это просто обращение к хешу.

PM MAIL Jabber   Вверх
arto
Дата 9.7.2009, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



$self->_session -- процедура
PM MAIL ICQ   Вверх
mvsgt
Дата 9.7.2009, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 27.3.2009

Репутация: 1
Всего: 1



Цитата(DaemonSuw @  9.7.2009,  18:38 Найти цитируемый пост)
В конце получаем:
@{скаляр}{список} = список - и что это значит?


Это значит, что Вы неаккуратно читаете код. Там 

@{hashref}{список} = список , то есть @hash{список} = список. Вроде же я писал?


Это сообщение отредактировал(а) mvsgt - 10.7.2009, 00:03
PM MAIL   Вверх
KSURi
Дата 10.7.2009, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



Это называется "срез хэша", по аналогии со "срезом массива". Очень мне нравятся такие конструкции)


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
DaemonSuw
Дата 10.7.2009, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 11.3.2008

Репутация: 3
Всего: 3



mvsgt, к сожалению вы часто редактируете сообщения) я не успеваю за релизами %)

Когда писал пост - этого не видел)
Цитата

Выделить всёкод Perl
1:
    
@{ $self->_session->{ $args{section} } }{ keys %{ $args{data} || {} } } = values %{ $args{data} || {} };

$self->_session->{ $args{section} } - hashref
keys %{ $args{data} || {} } -  ключи хэша
$args{data} || {} - значения хэша


Цитата

Очень мне нравятся такие конструкции) 


Ага конструкции  smile  магические) перловские....

Это сообщение отредактировал(а) DaemonSuw - 10.7.2009, 11:21
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0501 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.