Серия вопросов для собеседования на понимание работы 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;
Что эти программы напечатают и почему?
А) выведет примерно такое:
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