Perl 板


LINE

基本上你可以预期一个纯量变数会对应到记忆体中的固定一小片空间,其位置几 乎 [^1] 不会变。但若是用 print 去印的某个内容物是参照的变数的话, 印出来的後面那个数字代表的不是变数本身的位置,而是其内容物的位置。 以下面这个例子而言,印 "$Ref" 会显示出 $AAA 的位置。 my $AAA = 0; $Ref = \$AAA; print "1:$Ref\n"; 如果你想要得知 $Ref 的位置,可以透过 Devel::Peek 模组的 Dump() 函式: my $AAA = 0; $Ref = \$AAA; Dump($Ref); 然後会在 STDERR 上看到这一大片表示纯量变数内部结构的文字: SV = IV(0xe33cf4) at 0xe33cf8 REFCNT = 1 FLAGS = (ROK) RV = 0xe33cd8 SV = IV(0xe33cd4) at 0xe33cd8 REFCNT = 2 FLAGS = (IOK,pIOK) IV = 0 其中 16 进位数字就是位置,而前面 SV / IV 这两个关键字对应到的是 perl5.git 原始码中的资料结构。SV 对应到纯量变数 (scalar variable),IV 对应到整数数值 (integer value)。还有很多其他种类,很有兴趣的的话可以略 看一下 perlguts 这份文件: https://perldoc.perl.org/perlguts 其中第一行 SV 後面的 at 0xe33cf48 就是 $Ref 的位置, 而第五行的 SV = ... at 0xe33cd8 则是 $AAA 的位置。 回到你的原问题: 为什麽我使用my宣告後的第二次重新指定变数内容会让Perl指向新的记忆体位置, 而没有宣告的部份却是指向一样的位置? 我认爲这是爲了让实做上方便而必然的结果,如果从 `my` 的文件这段来看: https://perldoc.perl.org/functions/my (或: perldoc -f my) Redeclaring a variable in the same scope or statement will "shadow" the previous declaration, creating a new instance and preventing access to the previous one. 既然同名变数第 n+1 次的宣告必须将第 n 次的宣告内容盖掉,那要不就是用沿用同一个容器, 把旧的值清理乾净,相关副作用全部正确发动完毕之後再後装新的值进来,要不就是准备一个新容器, 让後旧的放在原地让 GC 机制 (ref count) 去清理。 考虑到参照物可能是所有资料型别,第二种准备新容器的做法应该比较省事。 简单讲就是:在同一段语意范围内宣告了两个 $AAA 的话,相当於是两个不同变数。 只是第二个出现後第一个就变成找不到了。 [^1]: 我一时之间还真想不到有没有甚麽状况会变。我猜如果 fork() 後再修改内容, 让 copy-on-write 发生,应该就会变。 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 125.56.75.152 (日本)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Perl/M.1676295893.A.307.html ※ 编辑: gugod (125.56.75.152 日本), 02/13/2023 21:51:09
1F:推 herculus6502: 推 02/14 06:26
2F:→ glo6e: 推 12/25 22:52







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP