避免重复的条件循环[perlmonks]

来源:互联网 发布:欧菲斯办公软件 编辑:程序博客网 时间:2024/06/14 20:17

# 在perlmonks看到的,感觉很灵活,原文http://perlmonks.org/?node_id=922074# # 解析格式如下的文件:# alpha # this line appears only once in the whole file# beta# beta# beta# beta# beta# beta# ...# beta# # 一般的循环如下:# while ( <FILE> ) {#     if ( /alpha/ ) {#         ....#     } else {#         ....#     }# }# 上面的代码每次都会判断是否为alpha,不管该文件有多少行。因为alpha在该文件中只会出现一次,有没有什么办法,使得程序在遇到alpha的以后循环就不在执行该分支?

#! /usr/bin/perlmy $f;$f = sub {    if (/alpha/) {        do_alpha();        $f = \&do_beta;    } else {        do_beta();    }};while (<DATA>) {    $f->();}sub do_alpha {    print "do_alpha(): \$f = $f, \$_ = $_";}sub do_beta {    print "do_beta():  \$f = $f, \$_ = $_";}__DATA__betabetabetabetaalphabetabetabetabetabetabetabetabeta

Output:do_beta():  $f = CODE(0x796e88), $_ = betado_beta():  $f = CODE(0x796e88), $_ = betado_beta():  $f = CODE(0x796e88), $_ = betado_beta():  $f = CODE(0x796e88), $_ = betado_alpha(): $f = CODE(0x796e88), $_ = alphado_beta():  $f = CODE(0x7c6ee8), $_ = betado_beta():  $f = CODE(0x7c6ee8), $_ = betado_beta():  $f = CODE(0x7c6ee8), $_ = betado_beta():  $f = CODE(0x7c6ee8), $_ = betado_beta():  $f = CODE(0x7c6ee8), $_ = betado_beta():  $f = CODE(0x7c6ee8), $_ = betado_beta():  $f = CODE(0x7c6ee8), $_ = betado_beta():  $f = CODE(0x7c6ee8), $_ = beta
#初始时,f检查是否遇到了alpha,一旦遇到了,就会将它自身替换为do_beta()。之后的每一行,都会调用do_beat()来处理。


原创粉丝点击