Perl ハッシュ

ハッシュは、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
Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です