perl精粹解析 - closure 与 静态局部变量

本文深入探讨了Perl中的closure概念,解释了它如何提供类似于C语言静态局部变量的功能。通过示例展示了closure如何在perl中实现私有变量的访问,并对比了与C语言中静态局部变量的区别。此外,还介绍了Perl中closure的两种常见用法,包括在子程序中返回子程序引用作为回调函数以及使用闭包变量生成不同函数指针。
摘要由CSDN通过智能技术生成

一.什么是closure

perl 中有一个概念叫“closure”(闭环,来源于数学):

假如有一个subroutine, 它访问了在其外部声明的私有变量,那么这个subroutine就叫做closure.

 

例如:

{

  my $count = 0;

  sub callback { print ++$count; };

  sub get_count{return $count;};

}

 

&callback();  //此时, $count = 1

&callback();  //此时, $count = 2

 

这里,callback和get_count就是一个closure,因为它访问了在其外部声明的私有变量$count.

 

closure在实际应用中提供了c语言中局部静态变量的功能。

它有以下特性:

 

1.访问的变量是私有变量,保证只有少数subroutine能访问到该变量,这些具有访问权限的subroutine就构成了一个环,因此也叫闭环;

   在上面的例子中,$callback和get_count构成了能访问$count的环;

   由于环中的subroutine都可以访问$count(与c语言中的静态变量作用一样),使得每一次访问都可以改变$count的值。

   在这个例子中,第一次调用&callback()后, $count的值变为1,第2次调用后,值变为2.

 

2.该私有变量的生命周期是与环中的生命周期最长的subroutine一样。这是通过perl中的引用计数机制来实现的:

   上面的例子中,在括号内的代码部分, $count的引用计数是3,出了括号,$count的引用计数变成了2,

   callback生命周期结束的时候,$count的引用计数减去1,此时变为1

   get_count生命周期结束的时候,$count的引用计数减去1,此时变为0  

   当$count的引用计数变为0之后,被perl回收。

 </

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值