位置: 编程技术 - 正文

perl中my与our的区别介绍(our与my的区别)

编辑:rootadmin

先来看下our的用法。

require 5.当版本号小于 5. 的时候,会返回失败,从而导致模块加载失败。所以它的作用就是保证模块调用环境的 Perl 版本。

our 和 my 一样,都是对变量的声明,不过 our 声明的是包全局变量,而 my 声明的是词法变量。

不过,经过 our 声明的变量,它会变得像一个词法变量一样,其实这也是 our 存在的目的:用来欺骗 strict pragma,使 strict 以为它是一个词法变量,其实却不是。

有一个简单的办法可以理解 our:1,你就把 our 声明的变量和 my 声明的当成一样。2,记住 our 和 my 的区别:our 声明的是一个包全局变量,因此在符号表中存储(可以通过全限定在任何地方访问),而 my 声明的是一个真正的词法变量,只能在闭合块中访问。使用my的情况:

输出:

使用our的情况:

输出:

附:perl中our的用法

其实,our 的出现有它的历史,Perl 和别的语言不同,可以随便声明变量,在 Perl 4 那个时代,根本就不需要 my 什么的,随便写个名字,就是变量了。在 Perl 5 中仍然如此,除非你用 my 明确声明为词法变量,否则所有的变量都是(包)全局变量,而且可以不声明直接使用。但是,这样有个坏处,那就是万一不小心写错名字了,或者解符号引用的时候,字符串运算错了,都会造成很多麻烦(因为按照 Perl 5 语法,这些都是正确的,其结果就是产生一个新的变量,很显然,这不是你想要的目的。)

所以,为了解决这些问题,在 Perl 5 中就引入了 strict 和 warnings 两个 pragma,它们的作用,就是限制变量不声明直接使用,经过 strict 和 warnings 限制后,所有没有声明的直接使用的变量都会报错。但是 my 声明的变量又是局部变量,local 又不能创造变量,所以,我们就没法使用全局变量了(注1),因此就又引入了 our,our 的作用就是声明一个全局变量,但是让 strict 和 warnings 以为它是词法变量,因此 our 声明的变量也是词法作用域的。但是实际上它是全局变量。

注1:如果不使用 our,我们有两种办法可以创建全局变量:1,用 no strict "vars" 临时关掉 strict pragma,声明完了再用 use strict "vars" 打开。2,用变量的全限定名称,如 $main::var 或者 $foo::bar 这样子。

use,package,our 三者之间无任何关系。

use 是加载一个 .pm 文件,package 是切换当前名字空间,our 是在当前名字空间中创建一个变量,如果该变量已经存在,则 our 只起到一个声明的作用。

你还是没有明白 our 和 my 的区别。our (或者什么修饰都没有)声明的是“包全局变量”,它的是“依附”在“包”上面的,它的存储位置是“包符号表”,my 声明的是“词法变量”,它是“依附”在“代码块”上的,它的存储位置是“代码块”的“变量标签薄”,所以词法变量不可以从代码块之外访问(除了传递引用)。但是包全局变量就不同了,用全限定就可以访问。

推荐整理分享perl中my与our的区别介绍(our与my的区别),希望有所帮助,仅作参考,欢迎阅读内容。

perl中my与our的区别介绍(our与my的区别)

文章相关热门搜索词:my和our的区别英语,英语中our和my的区别,perl中my什么意思,our和my的区别和用法,my pleasure和you're welcome的区别,perl中my什么意思,my和myp的区别,our和my的区别和用法,内容如对您有帮助,希望把文章链接给更多的朋友!

在vim中添加perl注释时无法对齐问题的解决方法 在.vimrc中加入如下几行,即可解决这个问题。"Onlydothispartwhencompiledwithsupportforautocommands.ifhas("autocmd")filetypepluginindentonelsesetautoindentendif"has("autocmd")

perl 文件操作总结 一、打开、关闭文件open的返回值用来确定打开文件的操作是否成功,当其成功时返回非零值,失败时返回零,因此可以如下判断:if(open(MYFILE,"myfile")){#h

Perl的经典用法分享 用Open()函数打开文件打开文件的常用方法是:open(FH,"$filename")ordie"Couldn'topen$filenameforreading:$!";open()函数通常带有两个参数,第一个为文件句柄,用于指向

标签: our与my的区别

本文链接地址:https://www.jiuchutong.com/biancheng/372469.html 转载请保留说明!

上一篇:perl特殊符号及默认的内部变量(perl中的$_)

下一篇:在vim中添加perl注释时无法对齐问题的解决方法(vim如何在文件中添加)

  • 行政单位利息收入可以扣除手续费
  • 施工单位企业所得税
  • 应收票据贷方余额怎么办
  • 企业注销未抵扣完的进项税
  • 土地使用权入账价值包括哪些
  • 空白增值税专用发票丢失罚款
  • 银行收回客户误扣的费用怎么处理?
  • 物业公司可以开什么项目的发票
  • 支付技术转让费能加计扣除
  • 已付款未收到发票怎么做分录
  • 持有营业执照
  • 安装费发票开具3%税率国税需要备案吗?
  • 厂家取得的销售收入
  • 同一建筑工程签不同合同
  • 不得抵扣啥意思
  • 股东放弃债权账务处理
  • 处置报废车辆如何缴纳增值税
  • 在win7系统中如何让电脑恢复出厂设置方法
  • 政府补助具有哪些特点?
  • 入账价值是啥
  • 无法添加用户和组
  • 右键新建菜单中没有文本文档怎么办
  • wordpress主题dux
  • win7的本地连接在哪
  • 其他应付款期初余额在哪方
  • 题管理录入新内容
  • 破产资产拍卖
  • php两个数组相加结果
  • php fopen()
  • 泛微oa二次开发难吗
  • php的二维数组
  • php xdebug配置
  • 物业水电费可以差额征税吗
  • yolov5训练中途停止了怎么办
  • php页面显示代码
  • sscom命令
  • 产权转移数据印花
  • 年底本年利润需要结转吗
  • 还没报税就自动清卡了怎么办
  • 个人所得税汇算清缴时间
  • 建造合同新准则
  • 申报表跟账不一致,如何调整账
  • python读取不到文件怎么办
  • 哪个网站可以免费学电脑
  • 工程开票金额大于结算金额怎么处理
  • 利息收入的纳税义务发生地
  • 绿化养护合同交不交印花税
  • 民办非企业的税务登记国税还是地税
  • 存款对银行经营的意义
  • 企业长期借款的渠道有哪些
  • 主营业务收入和销售费用的区别
  • 预收账款的核算处理
  • 交易性金融资产是什么意思
  • 进项税留抵怎么做分录
  • 转让专利权的使用权
  • 加油账务处理
  • 颁发数字证书要符合什么条件
  • 会计处理是会计分录吗
  • sql解析器是什么
  • mysql分页效率
  • sql server怎么向表里添加数据
  • 七喜r11c笔记本
  • macbook怎么修复磁盘
  • mac验证码无法显示怎么办
  • mac双系统怎么调整磁盘空间
  • win7系统通知在哪
  • WIN10系统打开IE浏览器断网
  • react组件写法
  • 上传图片 js
  • 在微信支付宝借贷会影响征信吗
  • 前端面试题csdn
  • 批处理命令教程
  • python日历查询系统
  • javascript的代码写在哪里
  • Linux bash Shell中的变量类型详解
  • shell bash sh
  • jquery返回顶部
  • 编写javascript代码
  • 税票开票员的职责
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设