Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1310459
  • 博文数量: 213
  • 博客积分: 7590
  • 博客等级: 少将
  • 技术积分: 2185
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-31 17:31
个人简介

热爱开源,热爱linux

文章分类

全部博文(213)

文章存档

2018年(4)

2017年(1)

2015年(1)

2014年(5)

2013年(2)

2012年(2)

2011年(21)

2010年(82)

2009年(72)

2008年(23)

分类: LINUX

2010-12-27 18:40:10


perl中的my our local

1.our 按照我的理解,就是一个全局变量,调用的时候会调用最后一次定义同名变量的值,如下

#!/usr/bin/perl -w

our $a="before greet1";
sub greet1 {
    print "$a\n";
    &greet2;
}
our $a="before greet2";
sub greet2 {
    print "$a\n";
}

print "$a\n";
greet1;

输出如下:

"our" variable $a redeclared at test.pl line 7.
before greet2
before greet2
before greet2

如果将程序变化一下成如下

#!/usr/bin/perl -w

our $a="before greet1";
sub greet1 {
    our $a="in greet1";
    print "$a\n";
    &greet2;
}
our $a="before greet2";
sub greet2 {
    print "$a\n";
}

print "$a\n";
greet1;

输出如下

"our" variable $a redeclared at test.pl line 8.
before greet2
in greet1
in greet1

由此可见最后一次定义的同名our变量是起最终作用的
2.my
把名字和值都限于限于某个范围",简单说,就是只能本层模块或者函数可以看到这个变量,高一层的或者低一层的都看不到的.

#!/usr/bin/perl -w

my $a="before greet1";
sub greet1 {
    my $a="in greet1";
    print "$a\n";
    &greet2;
}
sub greet2 {
    print "$a\n";
}

print "$a\n";
greet1;

输出:

before greet1
in greet1
before greet1

3.local
把值局限于某个范围",也有叫"动态词法范围",。我的理解,就是本层和本层下层的函数可以看到本层的变量,但是本层上一层的不可以。到底范围是多少,不仅取决于本层的函数,还要看下一层的程序长度和深度,所以叫"动态范围"。例如在某个函数中如果有local变量,则该函数中的所有函数都是可见的

#!/usr/bin/perl -w

sub greet1 {
    local $a="in greet1";
    &greet2;
}
sub greet2 {
    print "$a\n";
}
$a="hello world";
print "$a\n";
greet1;
greet2;

输出如下:

hello world
in greet1
hello world


阅读(2319) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~