![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Suppir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Делаю перебор в хеше:
foreach $x(keys %gar){ print OUT "$gar{$x}{topic}$gar{$x}{pub}\n" } значение $gar{$x}{topic} есть всегда а значения $gar{$x}{pub} есть в 90% случаев. Perl выдает: Use of uninitialized value in concatenation (.) or string at !comparator8.pl line 1496, <KON> line 2644738. Как сделать перебор правильно, чтобы не выскакивало предупреждений? Кроме $gar{$x}{pub} в хеше еще 10 параметров, которые могут быть, а могут и не быть. Нужно выводить их в том случае, если они есть. |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Я бы написал так:
Это сообщение отредактировал(а) ginnie - 20.4.2011, 16:10 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
Jimy |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 4.7.2010 Репутация: нет Всего: 3 |
|
||||
|
|||||
arto |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
perldoc -f exists
|
|||
|
||||
IceSunrise |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 7.4.2008 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
Suppir, паребираете элементы вы правильно, предупреждение возникает при выводе не существующего элемента хеша. Добавьте дополнительную проверку.
|
|||
|
||||
Suppir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Ребята, я использовал ранее предложенные вами варианты. Но мне нужно выводить, например, в log:
print log "$gar{$x}{topic}$gar{$x}{pub}$gar{$x}{prim}$gar{$x}{raw}\n\n" (и т.д., всего 10 параметров). Делать проверку всех параметров нереально - слишком много комбинаций. Нужно сделать огромное количество проверок перед выводом. Всегда есть параметр $gar{$x}{topic}, а остальные могут быть, а могут и не быть. Нужно вывести в лог только те параметры, которые есть. Но при этом чтобы не возникало предупреждений. Интересует, как можно добавить в хеш "пустые" элементы? Чтобы и в лог ничего лишнего не выводилось, и предупреждений не возникало. Это сообщение отредактировал(а) Suppir - 20.4.2011, 16:31 |
|||
|
||||
Pfailed |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
Сделать no warnings или вовсе не делать use warnings уже предлагали?
|
|||
|
||||
Suppir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Pfailed,
предупреждения я использую для отлова других ошибок. Очень полезно. Интересует, можно ли добавить в хеш "пустые" элементы (которые НЕ будут выводиться в log и не будут вызывать предупреждения). Это сообщение отредактировал(а) Suppir - 20.4.2011, 16:41 |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Suppir, чем мой вариант не устраивает?
Добавить элементы несложно:
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
Pfailed |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
|
||||
|
|||||
Suppir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Спасибо, попробую эти варианты:
$gar{$x}{$_} //= '' for (qw(topic pub prim raw)) # не выводить предупреждения об uninitialized только в этом блоке no warnings 'uninitialized'; print log "$gar{$x}{topic}$gar{$x}{pub}$gar{$x}{prim}$gar{$x}{raw}\n\n"; } |
|||
|
||||
Jimy |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 4.7.2010 Репутация: нет Всего: 3 |
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |