Perl 板


LINE

我只是初学者 这是我的一点浅见 orz 我是觉得cutecpu前辈提出的问题真的很有趣 ※ 引述《l10nel (小失)》之铭言: : ※ 引述《cutecpu (可爱中央处理器)》之铭言: : : 想请问为什麽: : : #!/usr/bin/perl -w : : @arr = (1,2,3); : : print @arr[2]; : : 会出现:「Scalar value @arr[2] better written as $arr[2] at ./g.pl line 5.」 : : 而以下 code 却不会 : : #!/usr/bin/perl -w : : @arr = (1,2,3); : : $ref = \@arr; : : print @$ref[2]; # 我一直以为要写成 ${$ref}[2] or $$ref[2] 才是对的 : : 谢谢^_^ : 很讶异 4、7、8 都是可行的(印出正确结果),但避免为宜。 : use warnings; : use strict; : my @arr = (1,2,3); : print $arr[2]; #3 1:正确写法 : print ${arr[2]}; #3 2:同1但没必要 : print ${arr}[2]; #3 3:同1但没必要 : print @arr[2]; #3 4:惊讶,这样在Perl 5.10竟然也行!何时开始可行的? : # 这的确是Perl 6的标准语法, : # 难道Perl 5向Perl 6借了新功能? : # 在 use warnings; 下遭到警告:Scalar value @arr[2] : # better written as $arr[2] 我比较想提出的看法是在这边 @arr[1]这种用法我很久前就开始用了 那时候好像perl 6架构也都还没有出来 这语法我认为最大的价值就在於 有时候在对array做sliding时 并不会知道需要切多少出来 例如我要从array A中找出符合的ID 再去array B调出符合的纪录 如果符合条件的只有一个元素 就会出问题 那强制锁定单数要用$ 在实作上似乎就不是那麽必要 而且可能还会造成程式员的负担 (因为要先确定元素个数有几个 再来决定前置符号 光是这点就有些麻烦) 後来的perl 6有对这部分改进 印象中理由就是 "大家从array中取值出来 如果用@会比较容易理解" 当然我是觉得有好有坏 如果是用Larry产品的人应该都知道他是"西方"语言学家 那边的语言名词都有单复数之别 相对的在"东方"语系对於名词的单复数就不是要求那麽严格 这种修改有可能跟Larry的语言上的美学有冲突 但对於使用perl实作时 的确是有些许帮助 (虽然也是会失去判别该变数的单复数区别能力 trade off的问题) : #print {@arr}[2]; #3 语法错误,大括号通常不该围住最前头的 @ $ 等符号 : my $ref = \@arr; : print "\n"; : print @$ref; #123 5:这是从$ref还原(dereference)阵列的标准做法 : print "\n"; : print $ref->[2]; #3 6:以$ref取阵列元素的标准做法,用->避开烦人的大括号 : print @$ref[2]; #3 7:以下7-10都同6,都能成功取得元素[2],但前头涉及 : # 两个符号,後面还接 [...], : print @{$ref}[2]; #3 8: 若再加大括号,非常烦人,这就是Perl令人诟病处, : # 能写成6的地方 : print $$ref[2]; #3 9: 应该尽量避免写成7-10 : print ${$ref}[2]; #3 10: : === : OUTPUT: : 3333 <- 1-4 各印出一个3 : 123 <- 阵列全部内容 : 33333 <- 6-10 各印出一个3 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.173.30 ※ 编辑: abliou 来自: 140.113.239.44 (04/24 14:35)
1F:→ l10nel:我也同意Perl 6这部份的改进很好,凡是与array有关的,无论 04/25 03:30
2F:→ l10nel:全阵列或单项元素一律是@,这样就清楚了。可惜Perl 6正式版 04/25 03:32
3F:→ l10nel:遥遥无期,不知要等到哪一年的圣诞节~ 04/25 03:33
4F:→ abliou:但就我的经验 其实还是有不好的地方 尤其有时候在debug时 04/25 15:15
5F:→ abliou:不能否认的 前置符号有时候可以加快我debug的时间 当然这就 04/25 15:16
6F:→ abliou:是文中讲的trade off的问题 毕竟有一好没有二好 04/25 15:17
7F:→ abliou:或者应该说 "都很好" 04/25 15:17







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

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

TOP