Perl 板


LINE

※ 引述《cutecpu (可爱中央处理器)》之铭言: : 问题一: : 请问 Perl 有办法像 C 一样,可以将一个 pointer 指到 array 的某个 : index 吗? : 例: : C: : int array[] = {1,2,3,4,5}; : int ptr = array + 2; /* : 将 ptr 指向 &array[2] : 所以 ptr[0] = 3 : ptr[1] = 4 : ptr[2] = 5 : */ : Perl: : @array = (1,2,3,4,5); : ######################################################## : # 有办法用什麽 reference 来达到上面 C 的功能吗? : # 希望不要用复制阵列的方式 → @arr = @array[2..$#array]; : ######################################################## 这个问题要达到你描述的那样, 最最基本上是不行. (不过 perl 很灵活, TIMTOWTDI, 所以加工一下还是有方法做到) reference 和 pointer 的主要差异, 就是 reference 不能作 pointer 的运算, 不可以 reference + 1 来取得所谓的下一项. 所以只提供 reference 而没有 pointer 的 runtime system 可以提供 garbage collection 的功能. 如果像 pointer 那样可以随意加减, runtime system 无法知道到底有哪一个 address 是真的再也不会用到. 你可以弄一个 $ptr = \$array[2]; 但是这样就只有 ref 到那一格, 而不是一整串; 如果你要做到一整串, 那麽也许可以考虑迂回一点包成一个物件, 这个物件里面有一个 array ref, 和一个 begin index, 存取的时候再去计算实际的那一项出来.. 你可以考虑 perl tie 的功能, (参考这边 http://perldoc.perl.org/perltie.html 和这边 http://perldoc.perl.org/Tie/Array.html ) 你可以做出一个用起来就像正常 array 的东西, 而且不用复制原来的 array. 应该是完全符合你的需求. (也有可能 CPAN 已经有这种 package 了, 不过我还没有去找) : 问题二: : Perl: : @array = (1,2,3,4,5); : @arr = @array[2..$#array]; : $ref = \@arr; # ←这样写 ok : ############################################## : # 想问的就是上面那行如果改成: : # $ref = \(@array[2..$#array]); : # 为什麽这时候的 $ref not an ARRAY reference? : ############################################## : 谢谢^_^ 因为 @array / @arr 这样的写法是 array 而 @array[2..$#array] 是 @array 里面 2 ~ $#array 这几个元素排的 list \@arr 是指向 @arr 的 ref \(@array[2..$#array]) 是一排分别指向 @array 的 2 ~ $#array 元素的 ref 所以 $ref = \(@array[2..$#array]) 的话, $ref 的值应该是 \$array[$#array] 如果对於什麽时候是 array 什麽时候是 list 有一点困惑.. 你可以这样去记: array 和 list 是不一样的东西, array 可以当 list 用, list 不能当 array 用. (但 list 可以指定到一个 array 里面去) --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.242.246.249
1F:推 abliou:推阿!! 03/29 17:23
※ 编辑: CindyLinz 来自: 210.242.246.249 (03/29 17:44)
2F:推 xatier:推! 03/30 01:03
3F:推 dryman:push!! 03/30 12:55
4F:推 cutecpu:谢谢 Linz ! 回答的好详细 03/30 18:24







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灯, 水草

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

TOP