社区
CGI
帖子详情
请教perl中my和local的区别?
OpenGL
2000-02-23 06:48:00
加精
如题!
...全文
4574
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函数中的变量是全局变量。
Redis实战视频课程
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存
中
。
区别
的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,
Perl
,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
[译][
Perl
6] 5to6-nutshell
About
Perl
6 document 翻译 本翻译意在帮助理解原文,因个人水平有限,难免会有翻译不当,如果疑惑请在评论
中
指出。 Translation 原文 从
Perl
5到
Perl
6 简而言之,以前做什么现在怎么做 吾欲以
Perl
6行
Perl
5之所为,当何如? 这个页面尝试去索引从
Perl
5到
Perl
6的...
程序员的语言“艳遇史”(六)——网络工程师
perl
(***以下小说情节纯属虚构,供朋友们在紧张编程后轻松一下,如有雷同纯属巧合,切勿对号入座***) 第六个女孩 网络工程师
perl
一、风雨割接夜 一个风雨交加的夜晚,我骑着我的小电驴,奔驰在东大街上。已是深夜,街上鬼影都没一个。突然一个塑料袋幽灵般的飞到我头上,我正惊魂未定,手机又响了。我拿起电话,不耐烦的说:“五点半才割接,你催什么催,我已经在路上了!”。那边传来一个冰冷的女声,“...
MySQL 5.1参考手册学习笔记 第1章:一般信息
1.2. 本手册采用的惯例 本手册采用了特定的印刷惯例: · 这类风格的文本用于SQL语句,数据库、表和列名称,C和
Perl
代码,以及环境变量。例如: 要想重新加载授权表,请使用FLUSH PRIVILEGES语句。 这类风格的文本用于指明键入的数如信息。 · 这类风格的文本用于指明可执行程序和脚本的名称,例如mysql(My
【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)使得依赖关系工作时更加的值得信赖,即当文件需要重新编译时可以被正确的执行; (2)提升编译系统的表现,即不必要的模块
CGI
2,204
社区成员
4,518
社区内容
发帖
与我相关
我的任务
CGI
Web 开发 CGI
复制链接
扫一扫
分享
社区描述
Web 开发 CGI
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章