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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Новичок, Работа с ХЕШАми, абсурд 
:(
    Опции темы
barberan
Дата 19.4.2010, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я недавно решил изучить Perl.

Вот, допустим есть хеш:
Код



%hash = (
    'Земля' =>'Луна' ,
    'Марс' => 'Фобос',
    'Марс' => 'Деймос',
    'Уран' => 'Ариэль',
    'Уран' => 'Титаник');

print "Планета :";
$plan = "Марс"; #<STDIN>;

while (($key,$value) = each %hash) {
if($key == $plan)
{
    print "$key = $value\n";

}


Мне нужно ввести название планеты, допустим, Марс, и увидеть список её спутников, т.е. Фобос и Деймос, в данном случае.
Почему-то не работает. Выводится весь ХЕШ, и то, у Урана только "Титиник", у Марса только "Деймос".
Помогите, пожалуйста)
PM MAIL   Вверх
Pfailed
Дата 19.4.2010, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Начните с use strict.
Строки нужно сравнивать оператором eq.
Одному ключу в хэше может соответствовать только одно значение. Повторным присваиванием вы перезаписываете старое значение.



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


Опытный
**


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

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



Для сравнения строк используйте 'eq'  а не '=='.

Для вывода одного элемента зачем вам бегать по всему хешу? Выводите конкретный элемент.

Как вы собираетесь элементы хеша различать? Ключи должны быть уникальны. Хотите хранить несколько значений, используйте ссылку на массив к примеру:

Код

%hash = (
    'Земля' =>'Луна' ,
    'Марс' => [ 'Фобос',  'Деймос' ],
    'Уран' => 'Ариэль',
    'Уран' => 'Титаник');

print "Планета :";
$plan = "Марс"; #<STDIN>;

if (ref $hash{$plan} eq 'ARRAY') 
  foreach (@{$hash{$plan}})
    print "$plan = $_\n";
else
  print "$plan = $hash{$plan}\n";



Не проверял, но приблизительно вот так.

Это сообщение отредактировал(а) Nab - 19.4.2010, 21:17


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
shamber
Дата 19.4.2010, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



barberan, ага и с кодировкой если что приготовьтесь побороться smile
PM MAIL Jabber   Вверх
krypt3r
Дата 21.4.2010, 07:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


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

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


 




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


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

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