免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: happig1
打印 上一主题 下一主题

perl中our的用法 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2012-01-10 10:41 |只看该作者
做了一测试:
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. our $var=77;
  5. package Temp;
  6. our $var;
  7. $var = 44;
  8. 1;
  9. package man;
  10. print $Temp::var,"\n";
  11. print $main::var,"\n";
  12. print $var,"\n";
  13. package Temp;
  14. $var = 99;
  15. 1;
  16. package main;
  17. print $Temp::var,"\n";
  18. print $main::var,"\n";
  19. print $var,"\n";
复制代码
结果是:

  1. 44
  2. 77
  3. 44
  4. 99
  5. 77
  6. 99
复制代码
为什么print $var,"\n";中的#var变量不是$main::var?

论坛徽章:
0
22 [报告]
发表于 2012-01-11 11:02 |只看该作者
my,our,local这些作用范围,当你代码写多了自然就 理解了,光扯理论和简单的例子还是理解不了

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
23 [报告]
发表于 2012-01-11 11:13 |只看该作者
rrrrrrrr8 发表于 2012-01-10 10:41
做了一测试:结果是:为什么print $var,"\n";中的#var变量不是$main::var?


你这里就牵涉到 our 很关键的词法作用域的问题。编译器在编译时遇到 $var 会怎么判断它是词法变量还是全局变量?如果是全局变量是哪个包呢?这要看它在哪声明而不是当前包是哪。main 里直接用 $var 最近的声明是在 Temp 包中,所以这里 $var 就是 $Temp::var 而不是 $main::var 这是编译器的选择

论坛徽章:
0
24 [报告]
发表于 2012-01-13 10:18 |只看该作者
好复杂,不过flw解释的很好。

论坛徽章:
0
25 [报告]
发表于 2012-01-13 10:34 |只看该作者
要是再讲讲local就好了。our, my, local,还有其他的么?

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
26 [报告]
发表于 2012-01-13 22:58 |只看该作者
flw用通俗简单易懂的方式解释的很好。
确实是这样的。

论坛徽章:
0
27 [报告]
发表于 2012-08-20 02:58 |只看该作者
不看不知道,看了才知道,好帖

论坛徽章:
4
15-16赛季CBA联赛之北控
日期:2016-12-06 11:11:0115-16赛季CBA联赛之广夏
日期:2016-12-06 15:04:1515-16赛季CBA联赛之四川
日期:2016-12-06 15:59:51黑曼巴
日期:2016-12-09 20:24:05
28 [报告]
发表于 2012-09-16 21:34 |只看该作者
回复 3# flw


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

您好!我的理解my 是局部变量 our是全局变量
词法变量? 请教一下是什么意思? 谢谢!

A my declares the listed variables to be local (lexically) to the enclosing block, file, or eval. If more than one value is listed, the list must be placed in parentheses.


这里 'lexically' google翻译出来就是 词汇、词法

论坛徽章:
0
29 [报告]
发表于 2012-09-16 23:49 |只看该作者
回复 28# 方兆国儿


    7年前的帖子也被你翻出来 。。

论坛徽章:
1
狮子座
日期:2014-03-27 12:53:15
30 [报告]
发表于 2012-09-17 08:17 |只看该作者
回复 7# flw

请问你上面提到的“词法变量”是什么意思??它有哪些使用要求,哪些特性??
它跟作用域的关系是怎么样的??

谢谢你

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP