perl中的范围声明our-my-local介绍
作者:junjie 发布时间:2022-12-15 02:21:50
标签:perl,范围声明,our-my-local
老实说,这个东西有点折腾人,主要是书上的表述很晦涩,其实搞懂不难。
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,外部的全局变量当然就隐藏了。


猜你喜欢
- 本文实例讲述了JavaScript使用setTimeout实现延迟弹出警告框的方法。分享给大家供大家参考。具体如下:先给大家展示一个延迟/定
- 数据库对象表时存储和操作数据的逻辑结构,而数据库对象存储过程和函数,则是用来实现将一组关于表操作的sql语句当作一个整体来执行。在数据库系统
- 本文实例讲述了PHP实现上传文件并存进数据库的方法。分享给大家供大家参考。具体如下:show_add.php文件如下:<?php &n
- 整数在Python中,整数(integer)是一种内置数据类型,用于表示整数值。Python中的整数类型可以表示任意大小的整数,而不需要考虑
- 大致流程:导包---import collections新建一个有序字典---collections.OrderedDict()写入json
- *args 和 **kwargs首先,要知道的是并不是必须写成*args和**kwargs。 只有变量前⾯的*才是必须的。所以,你也可以写成
- 处理excel表格的时候经常遇到合并单元格的情况,使用xlrd中的merged_cells的方法可以获取当前文档中的所有合并单元格的位置信息
- bcp是SQL Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据
- 画外接矩形框,可以画成一个最大的,也可以分别画。# -*- coding: utf-8 -*-import cv2image = cv2.i
- 双向链表的基本操作的实现,供大家参考,具体内容如下在之前的博客中介绍了三种链表,分别是单链表、单向循环链表以及双向链表。本篇博客将用Pyth
- 99bill: 1.md5.asp 代码如下:<% '''''''&
- 本文实例讲述了Python实现将绝对URL替换成相对URL的方法。分享给大家供大家参考。具体分析如下:一、问题:公司一个项目需要上传图片,一
- 声明:请事先到官网下载echarts,另外本文引用了adminlte模板构建前台页面views:<!-- /.row --> &
- 环境管理管理 Python 版本和环境的工具p:非常简单的交互式 python 版本管理工具。官网pyenv:简单的 Python 版本管理
- 错误出现情景在cmd中使用mysql命令,学生信息表添加数据。使用load data方式简单批量导入数据。准备好文本数据: xuesheng
- 在html 5增加了新元素header、footer,测试过发现IE不能解析html 5新增的元素。代码如下:<!DOCTYPE&nb
- Python可以使用open函数来实现文件的打开,关闭,读写操作;Python3中的open函数定义为:open(file, mode=
- 本文实例讲述了Python udp网络程序实现发送、接收数据功能。分享给大家供大家参考,具体如下:1. udp网络程序-发送数据创建一个基于
- 1.消息丢失1.生产者发送失败所有消息队列都可能发生的问题生产者发送消息后,队列未成功接收(网络原因或其他)而生产者不知情,消息丢失生产者发
- QQ医生在广大用户心中一直以来都是清爽便捷的一款安全工具,随着QQ医生的不断发展,QQ医生团队一直在思考,怎样能够给QQ医生用户带来性能更优