PerlのHashはありません。?

6 20、2006 / / alexken作成/ / 技術 / / 3 Comments

Perlでarrayは

= ( 1 , 2 , 3 , 4 , 5 , 6 ) ; my @ array =(1、2、3、4、5、6);

のように定義し、@を前に付けてくれる。
一方、hashは

= ( 'china' => 'beijing' , 'england' => 'london' ) ; my%capitals =( 'china' => 'beijing "、" england "=>' london ');

のように定義して%を付けてくれる。

そして使い方は、

= $capitals { 'china' } ; my $ a = $ capitals {'china'};

$ keyに$ valueの値を読み取る文法だから、てっきりJavaのHash Classのような奴で考えてしまっていた....​​.
(array of($ key - > $ val)):これは、それぞれの$ valをreferしている$ keyのarray

しかし、今日会社でperlでhashを関数の引数で渡すが、誘惑午前に行くことだった。

% ) { sub getHash(%){
= %_ ; my%hash =%_;
my ( $key , $val ) = each ( %hash ) ) { } while(my($ key、$ val)= each(%hash)){}
}

がないのだ。
本引き裂いたのになかった。

なぜだろう??

正解は、すべてのArrayとHashを出力する二つの関数を見ると分かります。

use strict;

@ ) { sub printHash(@){
= @_ ; my%h = @ _;

my ( $key , $val ) = each ( %h ) ) while(my($ key、$ val)= each(%h))
{
, " => " , $val , " \n " ; print $ key、 "=>"、$ val、 "\ n";
}
}

@ ) { sub printArray(@){
= @_ ; my @ a = @ _;

" \n " , @a ) ; print join( "\ n"、@ a);
" ; print "\ n";
}

そうだった。 PerlでHashはArraryそのものだった。

= ( 'china' => 'beijing' , 'england' => 'london' ) ; my%capitals =( 'china' => 'beijing "、" england "=>' london ');

= ( 'china' , 'beijing' , 'england' , 'london' ) ; my @ capitals =( 'china "、" beijing "、" england "、" london ");

つまり、二つのうち勝手にソンオンハンドィ
%capitalsと宣言し、@ captitalsのように使用してもされ、
逆に@ captitalsに宣言し、その後に%capitalsのように書いてもされる。

しかし、後者のように使用した場合、奇数個の引数を持つarrayをhashのように使用した場合どのようなsideeffectがあるのか​​わかりません。

Perlの人の中で私だけ知らなかった内容である。?
すごく当たり前のことや??
とにかく楽しみナンゴかが分かった。

ブログのカテゴリ

天体写真ギャラリー