Perl之my与local

在函数定义中,使用my关键字来确保用户定义函数中所使用的变量名不与任何其它同名的全局变量冲突,它使其后面的变量成为通常语言所谓的local变量。缺省情况下,perl函数中的变量是全局变量。 local变量先save再store.

如下例:

$x = 9;
sub mm{
    print "$x\n";
}
sub gg_my{
    my $x = 11;
    print "call-my $x\n";
    mm;
}
sub gg_local {
    local $x = 20;
    print "call-local $x\n";
    mm;
}
gg_my;
gg_local;
print $x;

运行结果:

call_my 11
9
call_local 20
20
9

可以看出,local函数在创建全局变量的一个局部实例后即可将它传递给任何子例程并继续进行局部初始赋值。

运算符my以与local函数同样的方法创建一次局部实例.

然而,由my创建的局部实例不能传递给其它子例程,传递给子例程进行运算的将是全局值而非局部引用值。

当locla所在的子例程结束后,全局变量的值又恢复为初始定义值。

my和local的区别

my: lexically scoped variable

local:Dynamically scoped variable

内部->外部:

(1)my和local都只在一个block里有效,出去就失效;

(2)但是local的变量可以继续在这个block中调用的子程序中存在;

(3)如果有与外界同名的变量,两者在block退出后都不影响外界同名变量;

外部->内部:

(1)外部设置my、local、缺省均队内有效,但是同名变量外部my,在block内部local是不允许的。因为二者在block中调用的子程序中均有效,会冲突。

(2)如果在一个block中有一个my修饰的变量和外界的一个变量同名,而且又需要在这个block中使用外界变量时,两个办法:

第一个办法,用main的package修饰这个变量名,$main::global

第二个办法,用our修饰,our $global,那么该block中接下来出现的所有$global都是外界的global

(3)编写脚本时,注意作用域,防止外部影响内部。



Perl之my与local,布布扣,bubuko.com

时间: 2024-10-07 18:20:11

Perl之my与local的相关文章

Perl脚本访问Greenplum数据库安装指导

安装前准备 (1)操作系统(系统上面要安装一些必备的开发工具(比如gcc等)) linux-82:/home/PlODBC # cat/etc/SuSE-release SUSE Linux EnterpriseServer 11 (x86_64) VERSION = 11 PATCHLEVEL = 1 (2)安装所需的软件包 greenplum-connectivity-4.3.0.0-build-2-SuSE10-x86_64.zip --GP官网下载,GP的JDBC和ODBC驱动 DBI-

Linux下Perl的安装

wget http://www.cpan.org/src/5.0/perl-5.20.1.tar.gz tar -xzf perl-5.20.1.tar.gz cd perl-5.20.1 ./Configure -des -Dprefix=$HOME/localperl make make test make install 上述这个过程大约耗时10多分钟 编辑第一个perl程序: #!/usr/local/bin/perl $value = 9.01e+21 + 0.01 - 9.01e+2

dpkg和perl的依赖环境出现错误故障解决(磁盘原因)

内核: uname -a Linux localhost.localdomain 3.4.29-t4 #12 Wed Mar 13 16:50:15 EST 2013 armv7l armv7l armv7l GNU/Linux dpkg安装应用时遇到问题,提示运行apt-get -f install修复依赖. apt-get -f install 后提示如下: debconf: Perl may be unconfigured (Can't locate Debconf/Log.pm in @

Perl/Nagios – Can’t locate utils.pm in @INC

While trying to use a Nagios plugin I got an error saying that “Can’t locate utils.pm in @INC”. Following is complete error: Can’t locate utils.pm in @INC (@INC contains: /root /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/li

Linux下Perl的安装(转)

原文地址:Linux下Perl的安装 今天在虚拟机测试shell脚本的时候,有些命令使用不了. 比如说 mysqlhotcopy ,它提示Perl的版本太低. 我用的 RedHat9 的Perl才5.8.0版本...(2002年以前的) 严重过时.所以重新安装了新版本的 Perl,过程记录如下: 1.在官方网站下载新版本的源码包: http://www.perl.org/get.html,版本自己选择,我下载的是perl-5.12.2.tar.gz 2.解压/usr/local/src下的per

Solve Perl Can't locate getopts.pl

前言 最近,使用Perl运行脚本出现问题 23333 Error Can't locate getopts.pl in @INC (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.28.1 /usr/local/share/perl/5.28.1 /usr/lib/x86_64-linux-gnu/perl5/5.28 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5

php编译安装脚本

#!/bin/bash DIR=$( cd "$( dirname "$0" )" && pwd ) SRCDIR=/usr/local/src phpVersion="5.6.25" phpUser=www phpGroup=www if [ $(id -u) -ne 0 ]; then         echo "Please run as root"         exit 1 fi DISTRO=&q

linux mint 安装 SecureCRT

最喜欢的ssh工具莫过于SecureCRT了,功能强大,方便易用.最近安装了mint17.1(基于ubuntu),就想安装一个SecureCRT来使用. [此SecureCRT仅作测试使用,不做商业用途,如有需要,请购买正版] 下面是安装过程: 1.下载SecureCRT (我用的是scrt-7.3.6.963.ubuntu13-64.tar.gz  放置解压/usr/local下) 下载地址:https://www.vandyke.com/download/securecrt/download

安装nginx的一些注意事项

1.如何彻底屏蔽掉Nginx的banner 为了安全或者某些个人的原因,如果要屏蔽掉nginx的banner,要修改以下几个位置: src/http/ngx_http_header_filter_module.c src/http/ngx_http_special_response.c src/core/nginx.h 按照网上绝大部分文章的说法是仅仅修改nginx.h,那么只在一种情况下这种修改是有效的:把server_tokens设置为on:但是,此时在404/403等各种内置错误页面面内看