新規記事投稿 フォロー記事投稿 記事のキャンセル
From: Yasu.F <yasuf@ariake.or.jp>
Subject: Re: perlちょっと教えてください。
Date: 1996/09/25 22:05:57
Reference: mesh.program/00073

9月25日に、なおき@あいちねっとさんは書きました。

>perlで
>
>&xxx
>$xxx
>@xxx
>
>は何とか分かってきたのですが
>
>%xxx
>
>ていいうのがちょっと・・・?なんです。
>簡単にちょっと教えていただけないですか?

%なんとか というのは「連想配列」といって、簡単にいうと
@なんとか の配列の添字が文字列に変わったものです。

例えば
$hp{'nir'} = 'http://www2.meshnet.or.jp/~nir/'; $hp{'naoki'} = 'http://www.aichinet.or.jp/'; $hp{'yasuf'} = 'http://www2.ariake.or.jp/~yasuf/'; $naoki_hp = $hp{'naoki'};
のようなことができます(って、どういうことだろう^^;) これでは、値を参照するためのキー(添字)が連続していないため、 すべての値について何かの処理をしたい場合などに不便です。そこで、 keys という演算子をつかって、
for (keys %hp) { print "$_ さんのホームページは $hp{$_} です\n"; }
というようにすることがよくあります。ここで、keys 連想配列名 は 連想配列のすべてのキーをリストとして返します。先ほどの例なら 'nir' 'naoki' 'yasuf' という3つの文字列を含むリストが返されます。 ただし、ここでこの3つの順番はまちまちですので(詳しくはCamel Bookを参照してください)、 順番に並べたい場合は sort keys %hp などのようにする必要があります。 面白いのが、連想配列をリストとして扱った(?)場合の振舞いです。 上の例などは、
%hp = ( 'nir', 'http://www2.meshnet.or.jp/~nir/', 'naoki', 'http://www.aichinet.or.jp/', 'yasuf', 'http//www2.ariake.or.jp/~yasuf/', );
というように、キーと値をペアにしたリストを使って一度に代入することが できます(うぇぶ会議室のsite.plでもやってますね^^) また、reverse演算子を連想配列に対して使うと、キーと値の対応が逆になります。 つまり、$hp{'http://www2.ariake.or.jp/~yasuf/'} eq 'yasuf' となってしまう わけです(同じ値のものがあれば、どちらかがなくなります) というような感じでしょうか^^;;