Я изучаю Perl в своей работе и наслаждаюсь этим. Обычно я работаю на Python, но босс хочет Perl.
Большинство концепций в Python и Perl отлично сочетаются: Python dictionary = Perl hash; Python tuple = список Perl; Список Python = массив Perl; и т.д.
Вопрос: Существует ли версия Python формы Iterator/Generator?
Пример. Классический способ Python генерировать числа Фибоначчи:
#!/usr/bin/python
def fibonacci(mag):
a, b = 0, 1
while a<=10**mag:
yield a
a, b = b, a+b
for number in fibonacci(15):
print "%17d" % number
Итераторы также полезны, если вы хотите создать подраздел гораздо большего списка по мере необходимости. Perl "списки" кажутся более статичными - больше похожи на кортеж Python. В Perl может foreach
быть динамическим или основываться только на статическом списке?
Форма Iterator на Python - это форма, к которой я привык, и я не нахожу ее документированной в Perl... Помимо написания этого в цикле или рекурсивно или создания огромного статического списка, как мне (для ex) написать подпрограмму Fibonacci в Perl? Есть ли Perl yield
, который мне не хватает?
В частности - как это записать:
#!/usr/bin/perl
use warnings; use strict; # yes -- i use those!
sub fibonacci {
# What goes here other than returning an array or list?
}
foreach my $number (fibonacci(15)) { print $number . "\n"; }
Заранее благодарим вас за новичка...