配列&ハッシュのアクセス方法いろいろ

Perl初心者のためのPerlノートです!

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ WEBリーダー/ 燈明日記/ yahoo

◆ はじめに

本ページは、私がPerlを習得した時(いや習得中)のノートです。

ごく普通の言語(COBOL,C,Java,VB等)を知っている人が、Perlをやり始めるといろいろと悩むことがあります。

それは、

です。

本ページは、そのようなハードルを一つ一つクリアにしていけたらと思います。

そして、本ページが何かのお役に立てれば幸いです。では、ごゆっくりご覧ください。

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくPerlノート掲示板へご指摘ください。

◆ サイト最新情報

◆ コンテンツ

2008-03-03 配列&ハッシュのアクセス方法いろいろ

配列やハッシュの要素へのアクセス方法は、大きく分けて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]要素をアクセス

◆ おすすめ Perl本

■ 続・初めてのPerl 改訂版

『初めてのPerl』の次ぎに読むと吉です。

結構いいですが・・・、初心者にはちょっと難しいかもです。

■ 結城浩のPerlクイズ

この本には、ちゃいちゃんパパの小話しが載っています(謎)。

ある程度、Perlを理解している人には、たまらない内容になっています。さすが結城先生だな!

結城浩のPerlクイズ

■ 新版Perl言語プログラミングレッスン入門編

実は、私はまだ読んでいませんが、結城先生の本なので良くないはずがありません。

新版Perl言語プログラミングレッスン入門編

■ CGI&Perlポケットリファレンス (Pocket reference)

この本は、非常に役に立ちます。ちょっと調べるのに最適です。サンプルも説明も的を射ています。

CGI&Perlポケットリファレンス (Pocket reference)

■ Perlベストプラクティス

一読の価値有りだと思います。

Perlベストプラクティス

■ プログラミングPerl〈VOLUME1〉

ご存知、Perl本の聖書、ラクダ本(上)です。

■ プログラミングPerl〈VOLUME2〉

ご存知、Perl本の聖書、ラクダ本(下)です。

◆ おわりに

最後に、本ページが、何かのお役に立てれば幸いです。

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくPerlノート掲示板へご指摘ください。

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ WEBリーダー/ 燈明日記/ yahoo