社区
CGI
帖子详情
请教perl中my和local的区别?
OpenGL
2000-02-23 06:48:00
加精
如题!
...全文
4569
7
打赏
收藏
请教perl中my和local的区别?
如题!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
netken
2001-08-13
打赏
举报
回复
其实对于 my 和 local ,主要还是和 typeglob 有关系
对于一个 perl 中的变量,都有一个 符号表 与之对应
比如有 $perl = 'a'; @perl = qw / a b c d /;%perl = ...;sub perl {};open(perl,...);
看起来其为同名,不同类型的各种符号
但在perl中,他们都是存放在一个的符号表中的同一个表项中的,都是在名为 perl 的表项。
然后通过一个 typeglob 的数据结构来来把各种值分开,typeglob 也就是 *perl
我们不妨做个实验
$a = 'a';@a = qw / a b c /;
print $a."\t".@a;
print $b."\t".@b;
*b=*a;
print $b."\t".@b;
当我们执行完了 *b=*a;也就是typeglob赋值操作以后,等于说在这个代码段中又建立了一个 符号表项 ,也就是 b,那么这个符号表项所指向的 typeglob 和 a 一样。
这样,等于说就同时建立了一个和a关联的b的变量,包括 $b,@b
对于local操作,其实是在这个代码段前,先把此 typeglob 中的各个项的值保存,然后在进行对这些变量的操作和运算,这样的话在该代码段结束前,这些变量“看起来”好象没什么变化,等到该代码段结束了,local的变量就会取出原来备份的值,在替换了现有的值。
而 my 呢?
my 并没有用到 typeglob 和 符号表,my 是在每个代码段都建立一个特殊的地方来专门存储这些变量,而且my的变量中没有了 typeglob 的概念,也就是说 my 中的 $a , @a 都是按一定的顺序存放到一个内存区中的,不会出现 *b=*a 的情况了。而在代码段结束的时候,只要这些变量的引用记数为0,就释放这些变量。
加之 my 特有的某些技术,所以速度一般要比较快,所以在代码段中,除非特殊的情况,一般常用my 来定义变量,当然,如果要传递一个句柄,是不能用 my 的。不用我说为什么了吧?o)
mahui
2000-09-25
打赏
举报
回复
my 只能在当前函数内部有效
local 可以在当前函数的下一级函数有效
std_ream
2000-03-21
打赏
举报
回复
my和local声明的变量都限定在所在的块范围内,不同的是
local关键字声明的变量在块范围内的子程序也能使用。
chenjp
2000-03-17
打赏
举报
回复
简单的举例而言,
对于sub A,
对于local变量,可以被A所调用的其他模块直接引用。
对于my变量,则只能在sub A中使用,不能被A所调用的其他模块直接引用。
2bao
2000-02-26
打赏
举报
回复
使用my的情况在于你在程序中包含了:user strict这个包
这个包就是用来规范化的程序设计的,这样的变量不会冲突,不会影响全局变量
建议你去买电子工业出版社出版的《perl详解》
DOU
2000-02-24
打赏
举报
回复
在perl中也有一个local函数,my则是操作符
local(EXPRESSION),my(EXPRESSION) ,my EXPRESSION
函数local生成所传递的全局表达式EXPRESSION的局部实例。该函数通常在向子例程传递参数时使用,这可确保传递的值不受子例程中变量的不利影响
my与local函数间有一些区别。local函数在创建全局变量的一个局部实例后即可将它传递给任何子例程并继续进行局部初始赋值。运算符my以与local函数同样的方法创建一次局部实例,然而,由my创建的局部实例不能传递给其它子例程,传递给子例程进行运算的将是全局值而非局部引用值。
懂的不多,仅供参考
DOU
2000-02-23
打赏
举报
回复
在函数定义中,使用my关键字来确保用户定义函数中所使用的变量名不与任何其它同名的全局变量冲突,它使其后面的变量成为通常语言所谓的local变量
缺省情况下,perl函数中的变量是全局变量。
[译][
Perl
6] 5to6-nutshell
本翻译意在帮助理解原文,因个人水平有限,难免会有翻译不当,如果疑惑请在评论
中
指出。 Translation 原文 从
Perl
5到
Perl
6 简而言之,以前做什么现在怎么做 吾欲以
Perl
6行
Perl
5之所为,当何如? 这个页面...
程序员的语言“艳遇史”(六)——网络工程师
perl
第六个女孩 网络工程师
perl
一、风雨割接夜 一个风雨交加的夜晚,我骑着我的小电驴,奔驰在东大街上。已是深夜,街上鬼影都没一个。突然一个塑料袋幽灵般的飞到我头上,我正惊魂未定,手机又响了。我拿起电话,...
MySQL 5.1参考手册学习笔记 第1章:一般信息
· 这类风格的文本用于SQL语句,数据库、表和列名称,C和
Perl
代码,以及环境变量。例如: 要想重新加载授权表,请使用FLUSH PRIVILEGES语句。 这类风格的文本用于指明键入的数如信息。 · 这类风格的文本用于...
【Android7.1.2源码解析系列】Android编译系统翻译------Android_Build_System(/build/core/build-system.html)
本文原文出自android-x86-5.1.1-r1源码
中
的/build/core/build-system.html文档。 Android编译系统 状态:草稿(2006年5月18日) 正文: 目的: 编译android系统工作的主要目的在于: (1)使得依赖关系工作时更加...
企业
中
MySQL主流高可用架构实战三部曲之MHA
老张最近两天有些忙,一些老铁一直问,啥时更新博文,我可能做不到天天更新啊,但保证以后一有空就写一些干货知识分享给大家。我们如果想要做好技术这项工作,一定要做到理论与实践先结合...然后整理在做实验过程
中
...
CGI
2,204
社区成员
4,518
社区内容
发帖
与我相关
我的任务
CGI
Web 开发 CGI
复制链接
扫一扫
分享
社区描述
Web 开发 CGI
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章