Иметь головоломку Perl:
my @l = ('a', 'b', 'c');
for (@l) {
my $n = 1;
print shift @l while (@l and $n --> 0);
print "\n";
}
Что это за печать? Должно быть a, b и c, верно? Но, подождите, на самом деле где-то ошибка, она печатает только a и b. Наверное, просто какая-то глупость, которую легко решить, верно?
Ладно, сделайте небольшое изменение кода, чтобы проверить все и измените @l на
my @l = ('a', 'b', 'c', 'd');
Что это за печать? Вероятно, a, b и c из-за того, что глупо один, верно? ... Подождите секунду, на самом деле он все еще печатает только a и b. Итак, ошибка в том, что он печатает только первые два символа.
Измените @l снова на
my @l = ('a', 'b', 'c', 'd', 'e');
Хм, теперь он печатает a, b и c. Но не д или е. Фактически, каждые 2 буквы, которые мы добавляем, заставляют печатать следующую букву в последовательности. Поэтому, если мы добавим f, он все равно будет просто печатать a, b и c, но если мы добавим f и g, он напечатает a, b, c и d.
Это также происходит с похожими результатами для разных значений $ n.
Так что здесь происходит?