Re: [问题] array reference

楼主: l10nel (小失)   2012-04-24 07:22:13
※ 引述《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]
#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

Links booklink

Contact Us: admin [ a t ] ucptt.com