Коварство each + for

| Комментариев: 4

Серия вопросов для собеседования на понимание работы each из Perl 5.12 в применении к массивам (требовать заранее знать, что делает each @a, разумеется не обязательно, можно и объяснить, но вопросы остаются теми же).

Программа А.

use v5.12;
my @letters = 'a'..'z';
for (my ($number, $char) = each @letters) {
    say "$number $char";
}

Программа Б.

use v5.12;
my @letters = 'a'..'z';
say $_ for each @letters;

Программа В.

use v5.12;
my @letters = 'a'..'z';
say $_ foreach @letters;

Что эти программы напечатают и почему?

Комментариев: 4

А) выведет примерно такое:
0 a
1 b
2 c
...
Здесь each отдает 2 значения: "номер элемента"=>"элемент", а say их выводит
Б)5.12 под рукой нету, затрудняюсь ответить, но думается что такое:
0
a
1
b
...
Здесь просто ответил на интуиции, т.к. понимания перла не хватает, да и нету 5.12 проверить
В)Ну тут все просто:
a
b
c
...
ну а тут стандарт, ничо не скажешь

Ну про второе я и не сомневался =)),
а вот первое... Где-то читал про эту функцию, что в 5.12, применная к массиву, она возвращает 2 скаляра, как от хэша. Ну да ладно где-то что-то не так прочитал. Установлю дебиан, там вроде уже 5.12, там поковыряю.
А решения будет, с объяснениями? =)

А) Б) В) выдадут одно и тоже:
a
b
c
...
z

Комментировать

Страницы

  • img

Об этой записи

Сообщение опубликовано 08.06.2010 22:25. Автор — ash.

Предыдущая запись — Еще раз про each в 5.12

Следующая запись — Universe::Galaxy и Acme::Test::42

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.