perl下迭代器的"示范"代码

perl下迭代器的"示范"代码

原本是帮一个朋友面试而写的,顺便公开出来,请多指教。

[Copy to clipboard] [ - ]
CODE:
#!/\perl/\bin
# Copyright (C) 2008 luo chuanting<[email]rocenting@gmail.com[/email]>
# Release under GPL license

use strict;

my $test_switch = 1;
main();

sub main {
        if ($test_switch == 1) {
                test_1();
                test_2();
        }
}

sub gen_iterator_1 {
        my $count = shift @_;

        while ($count < 10) {
                $count++;
                return (sub {gen_iterator_1($count)}, [$count, "gen_iterator_1"])
        }

        return;
}

sub cal_value {
        my $next_fn = shift @_;
        my $e;

        while (($next_fn, $e) = $next_fn->()) {
                print "$e->[1]: $e->[0]\n";
        }
}

sub test_1 {
        my $next_fn = sub {gen_iterator_1(0);};
        my $e;

        while (($next_fn,$e ) = $next_fn->()) {
                print "$e->[1]: $e->[0]\n";
        }
}


sub test_2 {
        my $count = 5;

        sub gen_iterator_2 {
                while ($count < 10) {
                        $count++;
                        return (\&gen_iterator_2, [$count, "gen_iterator_2"])
                }
                return;
        }

        cal_value(\&gen_iterator_2);
}

lz 是不是会用 python 啊


QUOTE:
原帖由 cobrawgl 于 2008-12-24 13:29 发表
lz 是不是会用 python 啊

怎么会这样说呢


QUOTE:
原帖由 cobrawgl 于 2008-12-24 13:29 发表
lz 是不是会用 python 啊

我感觉他是在拿 Perl 当 C 使。


QUOTE:
原帖由 MMMIX 于 2008-12-24 14:30 发表

我感觉他是在拿 Perl 当 C 使。

我看到他的

sub main {
        if ($test_switch == 1) {
                test_1();
                test_2();
        }
}

让我联想到 python 那个 if xx==....


QUOTE:
原帖由 MMMIX 于 2008-12-24 14:30 发表

我感觉他是在拿 Perl 当 C 使。

嗯,同意。

BTW:你不觉得他的代码风格很好吗?
说实话,本版好久没出现过这么好看的代码了。人才啊。


QUOTE:
原帖由 MMMIX 于 2008-12-24 14:30 发表

我感觉他是在拿 Perl 当 C 使。

Copyright (C)


QUOTE:
原帖由 ynchnluiti 于 2008-12-24 14:54 发表

Copyright (C)

(C) 是版权符号的意思。


QUOTE:
原帖由 flw 于 2008-12-24 14:57 发表

(C) 是版权符号的意思。

版主真幽默啊


QUOTE:
原帖由 flw 于 2008-12-24 14:47 发表

嗯,同意。

BTW:你不觉得他的代码风格很好吗?

shift @_; 看得我别扭死了