配列&ハッシュのアクセス方法いろいろ
配列やハッシュの要素へのアクセス方法は、大きく分けて3通りがあります。
- インデックスでのアクセス
- スライスでのアクセス
- 配列をリファレンスでのアクセス
しかし、1以外は、ワーニングで、やはりインデックスでアクセスするのが常道のようです。
ちなみに、2は、以下のワーニングが出ます。
Scalar value @a[0] better written as $a[0]
またちなみに、3は、以下のワーニングが出ます。
Using an array as a reference is deprecated.
(D deprecated) @foo->[23] や @$ref->[99] の形で、配列をリファレンスとして使おうとしました。 5.6.1 以前のバージョンの perl ではこの構文を許していましたが、そうするべきではありません。これは今では非推奨であり、将来のバージョンでは削除されるでしょう。
http://d.hatena.ne.jp/fbis/20080304/1204621962
一次元
use strict; use warnings; my @a = (10, 20, 30); # 以下は、すべて「10」と表示される print $a[0], "\n"; # インデックスで@aの0番目要素をアクセス print @a[0], "\n"; # スライスで@aの0番目要素をアクセス print @a->[0], "\n"; # 配列をリファレンスで@aの0番目要素をアクセス my %h = ('AA' => 100, 'BB' => 200, 'CC' => 300); # 以下は、すべて「200」と表示される print $h{BB}, "\n"; # インデックスで%hのBBキー要素をアクセス print @h{BB}, "\n"; # スライスで%hのBBキー要素をアクセス print %h->{BB}, "\n"; # 配列をリファレンスで%hのBBキー要素をアクセス?
2次元
use strict; use warnings; my @aa = ([ qw(aa ab ac) ], [ qw(ba bb bc) ], [ qw(ca cb cc) ]); # 以下は、すべて「ab」と表示される print ${$aa[0]}[1], "\n"; # インデックスで@aaの[0][1]要素をアクセス print $aa[0]->[1], "\n"; # インデックスで@aaの[0][1]要素をアクセス print $aa[0][1], "\n"; # インデックスで@aaの[0][1]要素をアクセス print ${@aa[0]}[1], "\n"; # スライスで@aaの[0][1]要素をアクセス print @aa[0]->[1], "\n"; # スライスで@aaの[0][1]要素をアクセス print @aa->[0]->[1], "\n"; # 配列をリファレンスで@aaの[0][1]要素をアクセス print @aa->[0][1], "\n"; # 配列をリファレンスで@aaの[0][1]要素をアクセス my %hh = ('AA' => [ qw(aa ab ac) ], 'BB' => [ qw(ba bb bc) ], 'CC' => [ qw(ca cb cc) ]); # 以下は、すべて「bb」と表示される print ${$hh{BB}}[1], "\n"; # インデックスで%hhの{BB}[1]要素をアクセス print $hh{BB}->[1], "\n"; # インデックスで%hhの{BB}[1]要素をアクセス print $hh{BB}[1], "\n"; # インデックスで%hhの{BB}[1]要素をアクセス print ${@hh{BB}}[1], "\n"; # スライスで%hhの{BB}[1]要素をアクセス print @hh{BB}->[1], "\n"; # スライスで%hhの{BB}[1]要素をアクセス print %hh->{BB}->[1], "\n"; # 配列をリファレンスでhhの{BB}[1]要素をアクセス print %hh->{BB}[1], "\n"; # 配列をリファレンスでhhの{BB}[1]要素をアクセス