perl – 为什么会选择在单独的语句中声明和初始化一个词汇变量?

这是从 AnyEvent::Intro摘录
# register a read watcher
my $read_watcher; $read_watcher = AnyEvent->io (
    fh   => $fh,poll => "r",cb   => sub {
        my $len = sysread $fh,$response,1024,length $response;

        if ($len <= 0) {
           # we are done,or an error occurred,lets ignore the latter
           undef $read_watcher; # no longer interested
           $cv->send ($response); # send results
        }
    },);

为什么使用

my $read_watcher; $read_watcher = AnyEvent->io (...

代替

my $read_watcher = AnyEvent->io (...

解决方法

因为闭包引用$read_watcher,并且$read_watcher解析为词法的范围只从包含我的语句开始.

这是有意的,所以这样的代码指的是两个单独的变量:

my $foo = 5;

{
    my $foo = $foo;
    $foo++;
    print "$foo\n";
}

print "$foo\n";

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...