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

# 在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/perl

my $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__
beta
beta
beta
beta
alpha
beta
beta
beta
beta
beta
beta
beta
beta

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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值