版权声明:本文为博主原创文章,未经博主同意不得转载。

https://blog.csdn.net/sunshoupo211/article/details/31745909

   在函数定义中,使用mykeyword来确保用户定义函数中所使用的变量名不与不论什么其他同名的全局变量冲突,它使其后面的变量成为通常语言所谓的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的更多相关文章

  1. 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”. Foll ...

  2. Linux下Perl的安装(转)

    原文地址:Linux下Perl的安装 今天在虚拟机测试shell脚本的时候,有些命令使用不了. 比如说 mysqlhotcopy ,它提示Perl的版本太低. 我用的 RedHat9 的Perl才5. ...

  3. perl 下使用非root用户安装模块

    perl下安装模块可以使用cpan命令,但是通常我们不具有root用户权限,所以只能以sudo方式安装模块. 例如需要安装Net::SCP::Expect模块, 执行cpan Net::SCP::Ex ...

  4. perl 语法速查

    同时学perl.python和shell脚本会很容易将它们的语法搞混,本文主要是一个个人的总结,方便要用时的查询. perl基本语法.安装.帮助文档 文件头格式: #!/usr/bin/perl us ...

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

    内核: uname -a Linux localhost.localdomain 3.4.29-t4 #12 Wed Mar 13 16:50:15 EST 2013 armv7l armv7l ar ...

  6. Perl使用模块和@INC

    use加载模块 安装模块后,都会有对应的文档,可以通过perldoc MODULE_NAME来获取模块的使用帮助. 例如:获取File::Utils的使用帮助. perldoc File::Utils ...

  7. Ubuntu12.04 上使用perl snmpwalk问题

    今天在Ubuntu12.04上使用perl来获取snmp数据,运行时出现下列问题.解决方法安装一下libnet-snmp-perl即可.命令行运行:sudo apt-get install libne ...

  8. perl 语法速查 | 模块安装

    perl -MCPAN -e shell install Bio::SeqIO 或者直接perl -MCPAN -e 'install Excel::Writer::XLSX' 用cpan装不上,编译 ...

  9. 【Perl】如何安装Bioperl模块?

    目录 失败尝试一:使用cpanm 失败尝试二:使用CPAN 成功尝试:直接conda安装bioperl 没有尝试:源码安装bioperl 生信软件绕不过Perl,Perl绕不过Bioperl.而Bio ...

随机推荐

  1. Action Bar

    1.显示隐藏Action Bar 1.配置上 在application 上的 android:theme="@style/AppTheme"全局配置ActionBar在某个acti ...

  2. 十九、curator recipes之PathChildrenCache

    简介 curator可以监听路径下子节点的变更操作,如创建节点,删除节点 官方文档:http://curator.apache.org/curator-recipes/path-cache.html ...

  3. java工程师_基础_阶段一_HTML笔记篇

    一.了解HTML语言 html:超文本标记语言. 二.HTML整体结构<html> <head> </head> <body> </body> ...

  4. Collection FrameWork

    Collection FrameWork如下: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashta ...

  5. egg.js-基于koa2的node.js进阶(一)

    一.路由进阶Egg路由的路由重定向,路由分组 在router.js修改为如下格式require引用 module.exports = app => { const { router, contr ...

  6. css中单位em和rem的区别

    在css中单位长度用的最多的是px.em.rem,这三个的区别是: px是固定的像素,一旦设置了就无法因为适应页面大小而改变. em和rem相对于px更具有灵活性,他们是相对长度单位,意思是长度不是定 ...

  7. Ajax 与 JSON

    Ajax,是对Asynchronous JavaScript + XML的简写.这一技术能够向服务器请求额外的数据而无需卸载页面,会带来更好的用户体验. Ajax的核心是XMLHttpRequest对 ...

  8. IntelliJ IDEA 2016 完美破解+汉化补丁

    百度网盘下载地址:链接:https://pan.baidu.com/s/1cB6XY-N02eRKgGs1kzvqKQ 密码:6pse IntelliJ IDEA 2016是一款JAVA语言发开发工具 ...

  9. Vue 框架-09-初识组件的应用

    Vue 框架-09-初识组件的应用 今天的第一个小实例,初步使用组件: 在 app.js 中定义模板组件,在 html 文件中使用自定义标签来显示 js 文件中定义的 html 代码块 比如说,下面定 ...

  10. 合理选择css3动画实现方式

    使用css3实现动画,比js控制DOM属性的方式要高效很多.流畅很多,主要分transition和animation两大方式. transition适用于一次性变换 animation适用于循环动画和 ...