=()= / Говнокод #16210 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
sub asd {
	
	print "WUT\n";
	
	return { 1 => 2 };
}

while( my ( $k, $v ) = each( %{ asd() } ) ) {
	
}

http://ideone.com/EvoMvV

Запостил: kainwinterheart kainwinterheart, (Updated )

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

  • Каждый раз создается новый HASHREF, а each сохраняет итератор для каждого хеша. Вполне очевидное поведение.

    Из той же оперы:
    while (my ($k, $v) = each %hash) {
        print "$k => $v\n";
        keys %hash;
    }

    http://ideone.com/PzjydH
    Ответить
    • Что keys() сбрасывает внутренний итератор - известно и документировано. А вот очевидным поведением в данном случае было бы один раз посчитать значение asd(), и уже потом работать именно с посчитанным значением, вместо того, чтобы по неведомой причине пересчитывать его каждый раз.
      Ответить

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8