![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Уважаемые коллеги!
Perl не перестает преподносить сюрпризы в самых неожиданных местах. Скажите, что выведет print в следующем фрагменте:
Пояснения можно прочитать в документации. Это сообщение отредактировал(а) ginnie - 26.6.2008, 19:50 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| n4n0bit |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 19.6.2008 Репутация: нет Всего: 1 |
гы)
Проинтапритировав в выводе получил 'c', эта навернео связано с тем что массив @array не определен, поэтому значение ключа 'b' будет слудующий ключ 'c' Но вот тут кортина немнога другая в выводе :
Вывод для разных значений ключей хеша %hash:
Это сообщение отредактировал(а) n4n0bit - 26.6.2008, 20:23 |
||||
|
|||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Да интересное замечание, но вполне логичное.
%hash = ( A => B => C => D => E => G); абсолютно идентичен %hash = ( A, B, C, D, E, G ); или %hash = ( A, B => C, D => E, G ); или %hash = ( A, B, (C, D, E), G ); что в итоге если заменим %hash = ( A, B, (), G ); получиться %hash = ( A => B, G => undef); потому как пустой список, это даже не undef, это ничто -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| Nab |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Это я все к тому что '=>' в перле это всего лишь замена ','.
Его можно использовать везде.
поэтому самый первый вариант:
идентичен следующему:
А так как список @array пустой, то так и получааеться что ключу 'b' присваиваеться значение 'c'. И соответсвенно сдвигаються все остальные значения, что показали результаты n4n0bit. -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
||||||
|
|||||||
| KSURi |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Думаю n4n0bit прав. Хотя на мой взгляд, было бы логичнее присвоить 'c' undef. -------------------- Died at Life.pl line 21 |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
Хе-хе..
Анонимный хеш вряд ли знаком с таким понятием как "перегрузка" -------------------- менеджер по кодеврайтингу |
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Что значит логичнее? Со стороны логики там все норм, обысновенное приведение типов, присваивание хешу значений массива. %hash = @array; просто оно оформлено еще с дополнительными элементами и скорее неочевидное чем нелогичное. Нужно глянуть с другой стороны, насколько логична сама конструкция, если человек хотел получить массив как элемент то ему необходимо было указывать ссылку на массив, а не массив. Тогда было бы абсолютно пофиг сколько там элементов. Если человек не ошибочно делает такую конструкцию, то какой ответ он хотел получить интересно. А если это опечатка, то и результат 'нелогичен' А undef там в принципе быть не мог, все таки массив может содержать ноль или больше элементов, но не undef. -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Уважаемый Nab, Вы абсолютно правы, использование массива при инициализации хеша в примере дано для упрощения. В реальной программе вместо массива используется вызов функции.
Я раньше не знал, что пустой список игнорируется внутри другого списка (плохо читал документацию), решил написать, чтобы другие тоже обратили внимание. -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
Nab, пропавший, но непропащий ;) Хорошо, что снова в "наших" рядах |
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
||||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Я тоже ребят рад что вас тут всех встретил Правда я давно чистым перлом не занимался, поэтому кое что прийдеться подтянуть. Но надеюсь буду полезен форуму, а он мне -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |