`
shake863
  • 浏览: 661505 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

perl范围声明our,my,local

    博客分类:
  • perl
阅读更多

老实说,这个东西有点折腾人,主要是书上的表述很晦涩,其实搞懂不难。
 
our,"把名字限于某个范围“,其实就是明确声明一个"全局变量",虽然是在某个模块或者函数里面定义的,外面的也可以访问,如果已经声明过了,再次用"our",表示此处用的是全局的那个,不是同名的私有或者局部变量
 
our $PROGRAM_NAME = "waiter";
{
 
my $PROGRAM_NAME = "something";
our $PROGRAM_NAME = "server"; #这里的our和外面的相同,和前句不同。
# 这里调用的代码看到的是"server"
}
# 这里执行的代码看到的仍然是"server".
 
my ,"把名字和值都限于限于某个范围",简单说,就是只能本层模块或者函数可以看到这个变量,高一层的或者低一层的都看不到的。
sub greeting1{
  my ($hello) = "How are you do?";
  greeting2();
 }
 
sub greeting2{
  print "$hello\n";
}
$hello = "How are you doing?";
greeting2();
greeting1();
greeting2();
 
运行结果:
How are you doing?
How are you doing?
How are you doing?
--------------------------
一个 How are you do? 都没有,在greeting1中call greeting2时,greeting2看不到greeting1的私有 $hello变量,只能看到外面的全局变量$hello
 
local,"把值局限于某个范围",也有叫"动态词法范围",有点不好懂。我的理解,就是本层和本层下层的函数可以看到本层的变量,但是本层上一层的不可以。到底范围是多少,不仅取决于本层的函数,还要看下一层的程序长度和深度,所以叫"动态范围"。
 
sub greeting1{
  local ($hello) = "How are you do?";
  greeting2();
 }
 
sub greeting2{
  print "$hello\n";
}
$hello = "How are you doing?";
greeting2();
greeting1();
greeting2();
 
运行结果:
How are you doing?
How are you do?
How are you doing?
-----------------------
跟用 my 时不一样了吧? 此时在greeting1调用greeting2时,greeting2可以看到greeting1的局部变量$hello,外部的全局变量当然就隐藏了。

分享到:
评论

相关推荐

    perl中的范围声明our-my-local介绍

    在Perl语言中,变量的作用范围由特定的关键字控制,这些关键字主要包括"our"、"my"和"local"。理解这些关键字的作用范围声明对于编写高质量的Perl代码至关重要。接下来,我们将详细探讨这些关键字,并通过代码示例...

    Perl作用域说明

    在Perl中,变量可以通过`my`、`local`或`our`等关键字进行声明。其中,`my`用于声明词法变量,`local`用于改变全局变量的行为,而`our`则声明包变量,使其在模块中可用。 **示例**: ```perl # 使用my声明词法变量...

    perl programing 编程基础版本

    - **4.7.3 词法范围全局声明:our** 用于声明全局变量。 - **4.7.4 动态范围变量:local** 临时改变变量的值而不改变其原始值。 - **4.8 用法(pragmas)** 如`use strict;` 和 `use warnings;`,用于提高...

    Perl 语言编程 全面讲解Perl各个部分

    - **词法范围全局声明:our**:声明全局变量。 - **动态范围变量:local**:修改现有变量的作用域。 **4.8 用法(pragmas)** - **控制警告**:使用 `use warnings` 控制警告消息。 - **控制全局变量的使用**:...

    PERL常见问题解答

    - 在Perl中,变量不需要预先声明,但推荐使用`my`、`our`或`local`关键字来定义变量的作用域。`my`用于局部变量,`our`用于共享同一作用域内的全局变量,`local`则用于临时改变全局变量的值。 2. **字符串与数字...

    Perl Programming - Basic

    - **变量声明**:使用`my`, `our`, `local`关键字来声明变量。 - **语句终止**:所有语句以分号`;`结束。 - **分支控制**:使用`if`, `unless`, `else`, `elsif`, `? :`等关键字实现条件判断。 - **循环结构**:`for...

    Perl 语言编程

    - **范围变量声明**:如 `local` 和 `my`。 - **词法范围的变量**:`my` 用于定义词法作用域内的变量。 - **词法范围全局声明**:`our` 用于定义词法范围内的全局变量。 - **动态范围变量**:`local` 用于改变已有...

    padwalker-perl的debug工具-for Windows

    然后,你可以利用 Padwalker 提供的各种函数,如 `peek_my()`, `peek_our()`, `peek_local()` 和 `peek_caller()` 等来查看和调试你的代码。 例如,`peek_my()` 可以查看当前作用域内的所有 my 变量,而 `peek_...

    PERL语言编程

    - **4.7.3 词法范围全局声明:our** - 用于共享变量。 - **4.7.4 动态范围变量:local** - 修改现有变量的作用域。 - **4.8 用法(pragmas)** - 如`use strict;`用于提高代码质量。 - **4.8.1 控制警告** - ...

    perl use guide 2.0

    # 第一行指定Perl解释器路径(例如:/usr/local/bin/perl) . . . # 代码主体部分 . . . exit 0; # 可选的最后一行 ``` #### 四、变量类型 Perl中的变量分为几种基本类型,包括标量、数组和哈希。 ##### 标量...

    Perl语言编程(大骆驼)

    - **词法范围全局声明**:使用 `our` 定义全局变量。 - **动态范围变量**:使用 `local` 改变变量在局部作用域内的值。 - **用法(pragmas)** - **控制警告**:如 `no warnings 'uninitialized'`。 - **控制...

    perl学习笔记,让你更容易入门

    在Perl中,可以使用`my`关键字声明局部变量,这有助于减少命名冲突并提高代码可读性。例如: ```perl { my $local_var = 10; print $local_var; # 输出10 } print $local_var; # 报错,因为$local_var在此作用域...

    perl - 基础

    2. **变量声明与引用**:Perl不需要显式声明变量,但可以使用`my`、`our`或`local`关键字来限制变量的作用域。引用允许我们创建指向其他变量、数组或哈希的指针。 3. **语法与控制结构**:Perl的语法相对自由,但...

    programming perl

    - **4.7.3 词法范围全局声明:our**:声明全局变量。 - **4.7.4 动态范围变量:local**:临时改变全局变量的值。 **4.8 用法(pragmas)** - **4.8.1 控制警告**:使用`no warnings`或`use warnings`来控制警告...

    Perl语言编程

    **4.7.3 词法范围全局声明:our** - 类似于全局变量,但具有词法作用域。 **4.7.4 动态范围变量:local** - 改变局部变量的值而不影响其原始值。 **4.8 用法(pragmas)** - 如`use strict`和`use warnings`...

    Perl高级教程人称“大骆驼”(免费)

    第一章 Perl概述............................................................................................................................10 1.1 从头开始.................................................

    我找到了perl-perl脚本-usefull-2

    在深入研究Perl脚本时,了解变量声明(如`my`, `our`, `local`)、流程控制(如`if`, `for`, `while`循环)、函数定义以及错误处理机制(如`eval`和`die`)是基础。Perl的语法有时被戏称为"line noise",但一旦熟悉...

    alien_8.79.tar.gz

    /usr/bin/perl "-MExtUtils::MY" -e "MY->fixin(shift)" blib/script/alien Manifying blib/man1/alien.1 Manifying blib/man3/Alien::Package::Tgz.3pm Manifying blib/man3/Alien::Package::Deb.3pm Manifying b...

    UE(官方下载)

    A question we often see is "I have a lot of blank lines in my file and I don't want to go through and manually delete them. Is there an easier way to do this?" The answer is: yes! Configure FTP Set up...

Global site tag (gtag.js) - Google Analytics