免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9789 | 回复: 11

use strict时,require "x.pl" 导入的our变量,如何不用全限定名访问 [复制链接]

论坛徽章:
0
发表于 2009-12-07 17:30 |显示全部楼层
x.pl 中:
use strict;
our $abc = 123;

l.pl 中
use strict;
require "x.pl";
#此时想访问 $abc 必须用全限定名:
print $main::abc
#如果 输入 print $abc,肯定提示 $abc 未声明


现象就是 our 声明是全限定在 源文件 内,外部文件访问时,如果有 use strict; 则必须 全限定名,目前的解决方法是:

my $abc = $main::abc; 来避免下文多个 $abc 的访问。

本来这确实就是 our 的特性,算不上问题,只不过突然想到这个行为很像 c 里面  external static 的声明,所以想请教下大家, perl 中是否有将 our 的全限定访问范围扩大到外部文件的方法?

论坛徽章:
0
发表于 2009-12-07 17:34 |显示全部楼层
用模块啊

论坛徽章:
0
发表于 2009-12-07 17:41 |显示全部楼层
require file本来就会导入符号嘛~

# cat a.pl
use strict;

our $x = 123;

1;


# cat b.pl
use strict;
require 'a.pl';
our $x;

print $x;


# perl b.pl
123

论坛徽章:
0
发表于 2009-12-07 17:42 |显示全部楼层
想过,觉得打包麻烦……
甚至想和 Exporter 的方法,一样,手工导一把,但看上去又不一样,require 的东东,确实已经在 %main:: 中了,所以就想知道怎么更改全限定范围……

“更改全限定范围”打到这句的时候,就明白了,想多了,实际就是在自己希望的 block 域内,再来一次:
our $abc = $main::abc;
不就更改范围了吗,our 变量,本身就是不存在重复定义的问题吧?~

论坛徽章:
0
发表于 2009-12-07 17:44 |显示全部楼层

回复 #4 dugu072_cu 的帖子

不用那么复杂啦~ 见偶的示例,直接our下就可以了,表明这是个package variable.

论坛徽章:
0
发表于 2009-12-07 17:45 |显示全部楼层
是啊,需要 再声明一次就可以了,当时没想到再声明就可以改变全限定范围了~~

论坛徽章:
0
发表于 2009-12-07 17:46 |显示全部楼层

回复 #6 dugu072_cu 的帖子

准确的说不是改变范围了,只是显式强调了一下~

论坛徽章:
0
发表于 2009-12-07 17:48 |显示全部楼层
谢谢仙子~~
再次复习了基础知识,Programming Perl 应该反复读!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2009-12-07 18:47 |显示全部楼层
our 和 local 只是声明,不是定义。
my 才是定义

论坛徽章:
0
发表于 2009-12-07 18:59 |显示全部楼层
谢谢 flw老大 指点,一句直指核心!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP