PerlのHashはありません。?
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)){}
}
= %_ ; 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";
}
@ ) { 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 ");
= ( 'china' , 'beijing' , 'england' , 'london' ) ; my @ capitals =( 'china "、" beijing "、" england "、" london ");
つまり、二つのうち勝手にソンオンハンドィ
%capitalsと宣言し、@ captitalsのように使用してもされ、
逆に@ captitalsに宣言し、その後に%capitalsのように書いてもされる。
しかし、後者のように使用した場合、奇数個の引数を持つarrayをhashのように使用した場合どのようなsideeffectがあるのかわかりません。
Perlの人の中で私だけ知らなかった内容である。?
すごく当たり前のことや??
とにかく楽しみナンゴかが分かった。







