作者DarkKiller (System hacked)
看板Perl
标题Re: [问题] array reference
时间Tue Apr 24 13:03:37 2012
※ 引述《cutecpu (可爱中央处理器)》之铭言:
: 想请问为什麽:
: #!/usr/bin/perl -w
: @arr = (1,2,3);
: print @arr[2];
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] 才是对的
print $ref->[2];
: 谢谢^_^
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 210.59.164.109
: → xatier:想一下 @arr[2] 是什麽XD 为什麽要前缀 @ 记号 04/23 21:10
: → firegsh:@arr[2]没这写法吧. 04/24 01:18
当然有 @arr[2] 这种写法啦,这在 perldata(1) 里面有提到,叫做 slice。
取自 manpage 的范例:
@days # ($days[0], $days[1],... $days[n])
@days[3,4,5] # same as ($days[3],$days[4],$days[5])
@days{'a','c'} # same as ($days{'a'},$days{'c'})
print @arr[2] 传回只有一个元素的 array,所以 print 出来的时候没差,只是
刚好触发 warnings (-w)。
而改用 reference 是因为 warnings 没判断这种用法,没给出警告讯息。
其实你要的是 $arr[2] 或是 $ref->[2]。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.242.135.97
※ 编辑: DarkKiller 来自: 210.242.135.97 (04/24 13:08)
1F:推 l10nel:忘了有slice这回事,谢谢提醒 04/25 03:25
2F:推 firegsh:我还真不知道orz 去确认了一次版本 04/26 12:07