1. Perl / Говнокод #13601

    −119

    1. 1
    2. 2
    return { nocache => 1,
                     data => %{ &template_process() } -> { 'data' } };

    Конечно же template_process возвращает HashRef сам по себе.

    Запостил: kainwinterheart, 13 Августа 2013

    Комментарии (15) RSS

    • Походу за пропущенное 'use warnings;' надо бить по наглой рыжей морде

      http://ideone.com/UTEyfM
      Ответить
      • На 5.10 ворнинга нет, только позже появляется. Собственно после обновления перла и нашлось.
        Ответить
    • Перл не знаю, в чём тут ГК?
      Ответить
      • в том, что %{ & } подразумевает хэш, но это может быть (и, скорее всего, так и есть) совсем не хэш, а преобразуется. отсюда и ворнинг
        Ответить
    • Это по идее должно выдавать варнинг при при попытке сделать хеш из одного элемента.
      Ответить
    • Странный код... Вопрос нафейхуя было ставить разыменовывание? Проще же %{ $hash } {'data'}
      Ответить
      • Догнал. &template_process() -> { 'data' }
        Ответить
      • >разыменовывание
        Вот я не пойму, на кой хуй это счастье в языке, где все типы - ссылочные?
        Ответить
        • Хороший вопрос. Если все было ссылками было бы намного проще. С другой стороны, этот вопрос к Ларри :)
          Ответить
        • Не все типы ссылочные -- базовые типы ведут себя как значения:

          http://ideone.com/EWcXOo
          Ответить
          • Ну и в яве тоже не все, но такой херни там нет. Просто зачем оно надо?
            Ответить
          • Базовые - это скаляр? Может, левый substr (который сам по себе лол еще тот) создает копию при модификации?
            Ответить
            • Substr таки не создает копию :)
              Конечно в контексте присваивания скаляров копия таки создается, но вот: http://ideone.com/GjTXps

              Базовые типы в перле -- это обычно скаляры, массивы и хеши (это если без "символьной" магии).
              Ответить

    Добавить комментарий