「初めてのPerl」 第六章
第六章から。
前回から間が開いてしまった。
色々一段落したため、再会。
第六章 ハッシュ
用語集
ハッシュ | キーと値のペアを持つデータ構造。全体を表すときのシジルは%。 |
---|---|
環境変数 | 環境情報は%ENVハッシュに格納されている。 |
イテレータ | 反復子。配列やハッシュの要素に繰り返してアクセスする際の位置。 |
Point
- ハッシュの要素にアクセスしたい。
#こんなハッシュがある時 my %hash = ('a', 'A', 'b', 'B', 'c', 'C'); # キー 値 # 'a' => 'A' # 'b' => 'B' # 'c' => 'C' #キーaのAにアクセスするときは print $hash{'a'} #A print $hash{a} #A
- 逆引き用のハッシュを作りたい。
#こんなハッシュがある時 my %hash = ('a', 'A', 'b', 'B', 'c', 'C'); # キー 値 # 'a' => 'A' # 'b' => 'B' # 'c' => 'C' #こうすると %hash = reverse %hash; #こうなる # キー 値 # 'A' => 'a' # 'B' => 'b' # 'C' => 'c' #ただし、元々のハッシュの値がユニークでなければ正確に処理してくれない
- ハッシュを分かりやすく書きたい。
#これだと分かりにくいため my %hash = ('a', 'A', 'b', 'B', 'c', 'C'); #,の変わりに=>を使うと分かりやすくなる my %hash = ( 'a' => 'A', 'b' => 'B', 'c' => 'C', );
- ハッシュのキー、もしくは値だけを取得したい。
#こんなハッシュがある時 my %hash = ('a', 'A', 'b', 'B', 'c', 'C'); #keys関数はハッシュのキーをリストで返す my @keys = keys %hash; # ('a', 'b', 'c') #values関数はハッシュの値をリストで返す my @values = values %hash; # ('A', 'B', 'C') #ただし、順番はバラバラ #ただキーと値の順は対応している('a'が最後にあれば'A'も最後にある)
- ハッシュ全体に対して繰り返し処理をしたい。
#こんなハッシュがある時 my %hash = ('a', 'A', 'b', 'B', 'c', 'C'); #こんな感じで繰り返し処理をする while ( ($key, $value) = each %hash ) { print "$key => $value\n"; } #'a' => 'A' #'b' => 'B' #'c' => 'C' #処理内容 ################################################ #eachによって%hashのキーと値のペアをリストで返し #$keyと$valueにそれぞれキーと値を代入する # ↓ #リスト代入によって要素数が返され #while文としては2はtrueとして判断される # ↓ #それを繰り返し%hashの要素の全てにアクセスし終わった時 #空リストが返され要素数は0となり #while文としてはfalseと判断され繰り返し処理が終了する ################################################ #イテレータによってアクセスする要素は順番に処理される #ただし、順番はバラバラ #ただキーと値の順は対応している('a'が最後にあれば'A'も最後にある)
- あるキーが存在しているか知りたい。
#こんなハッシュがある時 my %hash = ('a', 'A', 'b', 'B', 'c', 'C'); #exists関数で指定したキーが存在するか分かる exists $hash{a} #true exists $hash{x} #false
- 指定したキーの要素を削除したい。
#こんなハッシュがある時 my %hash = ('a', 'A', 'b', 'B', 'c', 'C'); #delete関数で指定したキーの要素を削除する delete $hash{a} exists $hash{a} #false #delete関数を使うこととundefを代入することは同義ではない $hash{b} = undef; exists $hash{b} #true
- 環境変数にアクセスしたい。
#環境情報は%ENVハッシュに格納してある #例えばPATHを取得したい場合 print $ENV{PATH}; #/usr/local/bin:/usr/bin:/sbin:/usr/sbin #環境変数登録はOSとシェルに依存する
次回は
次回は第七章を予定。