其实,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 这样子。

转载自:http://bbs.chinaunix.net/thread-556778-1-1.html

perl中our的用法相关推荐

  1. [Perl系列—] 2. Perl 中的引用用法

    Perl 中的引用,为什么要使用引用? 对于熟悉C语言的开发者来说, 指针这个概念一定不陌生. Perl 的引用就是指针,可以指向变量.数组.哈希表甚至子程序. Perl5中的两种Perl引用类型为硬 ...

  2. perl中last的用法

    在C语言中,如果想要退出一个循环,我们可以使用break.在perl中,没有beak这个关键字,但是perl却也提供了另外一个关键字,让程序从循环中跳出,那就是last.现在我们就看一下last的使用 ...

  3. Perl中use和require用法对比

    本文和大家重点学习一下Perl use和require用法对比,这两个函数都是一个意思,加载和引用Perl的模块,或者是子程序,区别在于Perl use是在当前默认的里面去寻找,一旦模块不在指定的区域 ...

  4. c语言中push函数pop函数用法,perl中pop与push函数

    pop 操作将数组的最后一个元素取出并返回: @array=5..9; $fred=pop(@array);      #$fred 得到 9,@array 现在为(5,6,7,8) $barney= ...

  5. mysql中正则表达式的用法_Mysql中正则表达式Regexp常见用法

    Mysql中Regexp常见用法 模糊匹配,包含特定字符串 # 查找content字段中包含"车友俱乐部"的记录 select * from club_content where ...

  6. php foreach嵌套foreach,php中foreach怎么嵌套foreach PHP中foreach函数用法?

    foreach的使用方法小编不是很明确,分享达人指教一下.foreach (array_expressforeach($array as $key) { if(xxxx) { break; //bre ...

  7. python代码大全表解释-python中的字典用法大全的代码

    如下代码是关于python中的字典用法大全的代码. #!/usr/bin/env python # # [SNIPPET_NAME: Dictionaries 101] # [SNIPPET_CATE ...

  8. php定义枚举,PHP中Enum(枚举)用法实例详解

    本文实例讲述了PHP中Enum(枚举)用法.分享给大家供大家参考,具体如下: PHP其实有Enum类库的,需要安装perl扩展,所以不是php的标准扩展,因此代码的实现需要运行的php环境支持. (1 ...

  9. 强大的Perl中的正则

    转载本站文章请注明,转载自:扶凯[http://www.php-oa.com] 本文链接: http://www.php-oa.com/2008/12/20/power-perl.html Perl的 ...

最新文章

  1. 使用Nmap获取目标服务器开放的服务以及操作系统信息
  2. 一文读懂深度学习中的各种卷积
  3. mysql实现pr曲线_ROC 曲线与 PR 曲线
  4. Java多线程(2)—线程同步
  5. python调用系统api_Python调用系统底层API播放wav文件的方法
  6. 医疗器械软件网络安全法规和标准概述(附所有标准)
  7. PHP 设计模式六大原则
  8. runltp出现问题 [
  9. Android 位置服务——BaiduLocation的使用
  10. linux 常用头文件,(常用头文件详解.doc
  11. java digests.generatesalt_Java DigestUtils.sha1Hex方法代碼示例
  12. 线程相关的sleep()、yield()、wait()、join()方法介绍
  13. git遇到的问题解决方案
  14. bzoj1036 count 树链剖分或LCT
  15. 运用getParameterNames()方法和getParameterValues()方法获取请求参数名称和内容
  16. 完美的支持Retina MACBOOK的股票软件-富图牛牛
  17. 亿道信息丨12.2英寸加固平板丨三防平板丨工业平板丨货物追踪好助手
  18. Dell电脑Fn与功能键的切换
  19. 如何把.dat文件转换成.mat文件
  20. C#中 var是个什么意思?

热门文章

  1. 爬取马蜂窝英国旅行攻略
  2. 好看的代码,千篇一律!难看的代码,卧槽卧槽~
  3. 对话孟岩:通证经济背后的陷阱及方法论
  4. CVE-2014-6271“破壳”漏洞
  5. 计算机课程设计收费管理系统,C语言机房收费管理系统课程设计
  6. 基于Mtk平台的android camera hal3学习
  7. 这一篇TCP总结,请务必收下!
  8. UVA10110-灯光
  9. 富途网络科技测试笔试题
  10. 淘宝商品详情api接口代码对接分享