Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как правильно работать с хешем в Perl / 9 сообщений из 9, страница 1 из 1
17.09.2012, 15:56:39
    #37960643
weare
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с хешем в Perl
Добрый день!

Подскажите, как правильно использовать хеш? Почему так получается? Заранее благодарен.
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
$Hash{A} = 1;
$Hash{B} = 1;

print " before\n";
print "-- A:" . $Hash{A}{key} . "\n" if exists $Hash{A}{key};
print "-- B:" . $Hash{B}{key} . "\n" if exists $Hash{B}{key};

$Hash{B}{key} = 2;

print " after\n";
print "-- A:" . $Hash{A}{key} . "\n" if exists $Hash{A}{key};
print "-- B:" . $Hash{B}{key} . "\n" if exists $Hash{B}{key};



Получаем:
Код: python
1.
2.
3.
4.
before
after
-- A:2
-- B:2
...
Рейтинг: 0 / 0
17.09.2012, 18:12:50
    #37960967
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с хешем в Perl
.... почему так получилось? потому что в хэш к единице под ключем
'key'
впихнуто значение 2.
(наверное)
одна и та же единица будет лежать при присваиваниях в строчках 1-2 или разные - я по стандарту языка не могу сказать, гарантирует он это, или нет.
а вот что это за единица.... сама по себе как таковая, или переменная с именем '1' в глобальном пространстве имен? я тоже пожалуй не берусь сказать. если ссыль на глобальное пр-во имен - тогда понятно

А что собственно говоря хочется? ))))
...
Рейтинг: 0 / 0
18.09.2012, 02:06:51
    #37961457
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с хешем в Perl
$Hash{A} = 1; - это вы записали скалярное значение в хеш, а потом пытаетесь использовать его как ссылку на массив :
if exists $Hash{A}{key}

Если бы не забыли, что второй строчкой любой программы на perl должна быть "use strict;", то вывелось бы сообщение :
Can't use string ("1") as a HASH ref while "strict refs",
натолкнувшее бы на эту мысль.


К счастью, в хеш можно поместить ссылку на хеш:
# самый очевидный и предсказуемый java-стайл :
my %h = ( key => 1);
$Hash{'A'}=\%h;

# или сразу ссылку на анонимный хеш :

$Hash{'B'}= { key => 1 };

# или просто попытаться использовать хеш хешей и он тоже создастся (это совсем по-нашему по-бразильски):
$Hash{'B'}{'key'}=1;
...
Рейтинг: 0 / 0
18.09.2012, 12:04:44
    #37961912
weare
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с хешем в Perl
netwindЕсли бы не забыли, что второй строчкой любой программы на perl должна быть "use strict;", то вывелось бы сообщение :
Can't use string ("1") as a HASH ref while "strict refs",
натолкнувшее бы на эту мысль.

Спасибо! Понял свою ошибку)
...
Рейтинг: 0 / 0
18.09.2012, 12:47:46
    #37962037
Warstone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с хешем в Perl
netwindЕсли бы не забыли, что второй строчкой любой программы на perl должна быть "use strict;"В общем случае это заблуждение, но в частности - истина.
...
Рейтинг: 0 / 0
18.09.2012, 12:55:31
    #37962059
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с хешем в Perl
Warstone, это МУДРАСЦЬ ВЕКОВ!
...
Рейтинг: 0 / 0
18.09.2012, 12:56:04
    #37962063
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с хешем в Perl
ну а первой строчкой !#/usr/bin/perl конечно же.
...
Рейтинг: 0 / 0
18.09.2012, 17:39:19
    #37962737
Warstone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с хешем в Perl
netwindWarstone, это МУДРАСЦЬ ВЕКОВ!Тогда третья должна быть use warnings;
...
Рейтинг: 0 / 0
18.09.2012, 17:40:24
    #37962743
Warstone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с хешем в Perl
WarstonenetwindWarstone, это МУДРАСЦЬ ВЕКОВ!Тогда третья должна быть use warnings;А 4-я - use Data::Dumper;
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как правильно работать с хешем в Perl / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]