新規記事投稿
フォロー記事投稿
記事のキャンセル
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' となってしまう
わけです(同じ値のものがあれば、どちらかがなくなります)
というような感じでしょうか^^;;