Chinaunix首页 | 论坛 | 博客
  • 博客访问: 45216
  • 博文数量: 43
  • 博客积分: 1161
  • 博客等级: 少尉
  • 技术积分: 425
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-24 11:14
文章分类
文章存档

2011年(40)

2010年(3)

分类: Python/Ruby

2011-04-25 23:56:52

Perl会自动将参数列表化名为特殊的数组变量 @_ ,该变量在子程序执行期间有效.子程序可以访问这个数组,以判断参数的个数以及参数的值.

@_ 是子程序的私有变量,假如已经有了全局变量@_,则该变量在子程序调用前会先被存起来,并在子程序返回时恢复原本的值.

即使子程序递归调用自己,每次调用时仍然会取得一个新的@_.

在一种特殊情况下,子程序调用不会生成私有@_,而是会从上下文继承.即以前导符 & 调用子程序,并且没有参数列表,如 &fun.

  1. #!/usr/bin/perl
  2. use strict;
  3. @_=qw(a b c);
  4. sub fun {
  5.     print"in the function:@_\n";
  6. }
  7. fun(1,2,3);
  8. fun;
  9. &fun(5,6,7);
  10. &fun;
  11. print"out of the function:@_\n";


从结果可以看到,第10行中的子程序调用继承了全局的@_ ,因此,为了保证子程序调用时参数列表的正确,推荐的调用方式是 &fun().
在递归环境中,子程序按第10行方式调用时,继承的@_是来自于上级堆栈.

阅读(254) | 评论(0) | 转发(0) |
0

上一篇:wantarry

下一篇:标量上下文与列表上下文

给主人留下些什么吧!~~