ハッシュは、key/valueのペアの集合です。
Perlのハッシュ変数は、パーセント記号(%)で始まります。
ハッシュ要素にアクセスする形式:${key}。
次にはシンプルなハッシュの実例を挙げます。
実例
#!/usr/bin/perl
%data = ('google', 'google.com', 'ceodata', 'ceodata.com', 'yahoo', 'yahoo.com');
print "\$data{'google'} = $data{'google'}\n";
print "\$data{'ceodata'} = $data{'ceodata'}\n";
print "\$data{'yahoo'} = $data{'yahoo'}\n";
上記のプログラムを実行した出力結果は次のとおりです。
$data{'google'} = google.com
$data{'ceodata'} = ceodata.com
$data{'yahoo'} = yahoo.com
目次
ハッシュを作成する
ハッシュを作成するには、次の2つの方法があります。
各keyのvalueを設定する
$data{'google'} = 'google.com';
$data{'runoob'} = 'ceodata.com';
$data{'taobao'} = 'yahoo.com';
リストによって設定する
リストの最初の要素はkeyで、2番目の要素はvalueです。
%data = ('google', 'google.com', 'ceodata', 'ceodata.com', 'yahoo', 'yahoo.com');
=>記号を使用してkey/valueを設定できます。
%data = ('google'=>'google.com', 'ceodata'=>'ceodata.com', 'yahoo'=>'yahoo.com');
次の実例は、上記の実例の変形であり、引用符の代わりに-を使用しています。
%data = (-google=>'google.com', -ceodata=>'ceodata.com', -yahoo=>'yahoo.com');
この方法を使用すれば、keyにスペースを表示できません。要素を読み取る方法は次のとおりです。
$val = $data{-google}
$val = $data{-ceodata}
ハッシュ要素にアクセスする
ハッシュ要素にアクセスする形式:${key}。次には例を挙げます。
実例
#!/usr/bin/perl
%data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
print "\$data{'google'} = $data{'google'}\n";
print "\$data{'ceodata'} = $data{'ceodata'}\n";
print "\$data{'yahoo'} = $data{'yahoo'}\n";
上記のプログラムを実行した出力結果は次のとおりです。
$data{'google'} = google.com
$data{'ceodata'} = ceodata.com
$data{'yahoo'} = yahoo.com
ハッシュ値を読み取る
配列のようにハッシュから値を抽出できます。
ハッシュ値を配列から抽出する構文:@{key1,key2}
実例
#!/uer/bin/perl
%data = (-yahoo => 45, -google => 30, -ceodata => 40);
@array = @data{-yahoo, -ceodata};
print "Array : @array\n";
上記のプログラムを実行した出力結果は次のとおりです。
Array : 45 40
ハッシュのkeyと valueを読み取る
すべてのkeyを読み取る
keys関数を使用して、ハッシュのすべてのkeyを読み取ることができます。構文は次のとおりです。
keys %HASH
この関数は、すべてのハッシュにあるすべてのkeyの配列を返します。
実例
#!/usr/bin/perl
%data = ('google'=>'google.com', 'ceodata'=>'ceodata.com', 'yahoo'=>'yahoo.com');
@names = keys %data;
print "$names[0]\n";
print "$names[1]\n";
print "$names[2]\n";
上記のプログラムを実行した出力結果は次のとおりです。
yahoo
google
ceodata
values関数を使用して、ハッシュのすべての値を読み取ることができます。構文は次のとおりです。
values %HASH
この関数は、すべてのハッシュのすべてのvalueの配列を返します。
実例
#!/usr/bin/perl
%data = ('google'=>'google.com', 'ceodata'=>'ceodata.com', 'yahoo'=>'yahoo.com');
@urls = values %data;
print "$urls[0]\n";
print "$urls[1]\n";
print "$urls[2]\n";
上記のプログラムを実行した出力結果は次のとおりです。
yahoo.com
ceodata.com
google.com
要素が存在であるかどうかを検出する
ハッシュ内に存在しないkey/value のペアを読み取ると、undefined値が返され、実行する時に警告が表示されます。
この状況を回避するために、exists関数を使用してkeyが存在するかどうかを判別し、存在する場合、読み取ることができます。
実例
#!/usr/bin/perl
%data = ('google'=>'google.com', 'ceodata'=>'ceodata.com', 'yahoo'=>'yahoo.com');
if( exists($data{'facebook'} ) ){
print "fackbookのホームページは $data{'facebook'} \n";
}
else
{
print "facebook keyが存在しません\n";
}
上記のプログラムを実行した出力結果は次のとおりです。
facebook keyが存在しません
上記のコードではIF…ELSE ステートメントを使用しました。これについては、次の章で詳しく説明します。
ハッシュのサイズを取得する
ハッシュのサイズは要素の個数です。最初にkeyまたはvalueにあるすべての要素配列を取得し、次に配列要素の個数を計算して、ハッシュサイズを取得します。次には例を挙げます。
実例
#!/usr/bin/perl
%data = ('google'=>'google.com', 'ceodata'=>'ceodata.com', 'yahoo'=>'yahoo.com');
@keys = keys %data;
$size = @keys; print "1 - ハッシュのサイズ:
$size\n";
@values = values %data;
$size = @values;
print "2 - ハッシュのサイズ: $size\n";
上記のプログラムを実行した出力結果は次のとおりです。
1 - ハッシュのサイズ: 3
2 - ハッシュのサイズ: 3
ハッシュから要素を追加または削除する
key/valueのペアを追加することは、シンプルな割り当てで実行できます。ただし、ハッシュ要素を削除するには、delete関数を使用する必要があります。
実例
#!/usr/bin/perl
%data = ('google'=>'google.com', 'ceodata'=>'ceodata.com', 'yahoo'=>'yahoo.com');
@keys = keys %data;
$size = @keys;
print "1 - ハッシュのサイズ: $size\n"; # 要素を追加する
$data{'facebook'} = 'facebook.com';
@keys = keys %data;
$size = @keys;
print "2 - ハッシュのサイズ: $size\n"; # ハッシュ内の要素を削除する
delete $data{'yahoo'};
@keys = keys %data;
$size = @keys;
print "3 - ハッシュのサイズ: $size\n";
上記のプログラムを実行した出力結果は次のとおりです。
1 - ハッシュのサイズ: 3
2 - ハッシュのサイズ: 4
3 - ハッシュのサイズ: 3
反復ハッシュ
foreachとwhileを使用して、ハッシュを繰り返すことができます。
実例-foreachの使用
#!/usr/bin/perl %data = ('google'=>'google.com', 'ceodata'=>'ceodata.com', 'yahoo'=>'yahoo.com');
foreach $key (keys %data){
print "$data{$key}\n";
}
実例-whileの使用
#!/usr/bin/perl
%data = ('google'=>'google.com', 'ceodata'=>'ceodata.com', 'yahoo'=>'yahoo.com');
while(($key, $value) = each(%data)){
print "$data{$key}\n";
}
上記のプログラムを実行した出力結果は次のとおりです。
ceodata.com
google.com
yahoo.com
コメントを残す