我觉得这个例子更好理解一些,拿出来分享一下:
#!/perl

######################################################################

my $name="Tommy"; #词法作用域变量--这个程序文件内有效

{
   my $name = "Grandfather"; # 词法作用域变量--这个闭合的语句块内有效

   my $age = 86; # 词法作用域变量--这个闭合的语句块内有效

   $ref = sub{ return "$name is $age.\n"; } #定义一个匿名函数的参考,在函数中调用闭合块内的变量

}
print "$name is back\n";#这里打印的时候块里的$name已经“过期”了,所以肯定打印的是块外的$name。

print &{$ref}; # 这里通过参考来调用上面的匿名子函数,此时打印的却是块内的变量的内容。这个子例程就是闭包。

   
# Output:

# Tommy is back.

# Grandfather is 86.


#########################################################################

#我的理解是:如果一个匿名函数调用词法作用域变量时。

#它会使变量的参考数增加,从而使其变量的生命可以得以延续,在匿名函数被调用时,就可以访问到这些变量的值。

#可以理解成夹带这这些变量的子例程。

#也可以理解成对这些变量的另一种形式的参考。