Perl-hashes
Perl-ハッシュ
ハッシュは*キー/値*のペアのセットです。 ハッシュ変数の前にはパーセント記号(%)が付きます。 ハッシュの単一の要素を参照するには、「$」記号が前にあり、中括弧内の値に関連付けられた「キー」が後に続くハッシュ変数名を使用します。
ハッシュ変数を使用した簡単な例を次に示します-
#!/usr/bin/perl
%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);
print "\$data{'John Paul'} = $data{'John Paul'}\n";
print "\$data{'Lisa'} = $data{'Lisa'}\n";
print "\$data{'Kumar'} = $data{'Kumar'}\n";
これは、次の結果を生成します-
$data{'John Paul'} = 45
$data{'Lisa'} = 30
$data{'Kumar'} = 40
ハッシュを作成する
ハッシュは、次の2つの方法のいずれかで作成されます。 最初の方法では、名前付きキーに値を1つずつ割り当てます-
$data{'John Paul'} = 45;
$data{'Lisa'} = 30;
$data{'Kumar'} = 40;
2番目の場合、リストを使用します。これは、リストから個々のペアを取得することによって変換されます。ペアの最初の要素がキーとして使用され、2番目の要素が値として使用されます。 たとえば-
%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);
明確にするために、⇒をのエイリアスとして使用して、次のようにキー/値のペアを示すことができます-
%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);
上記のフォームのもう1つのバリアントがあります、それを見てください、ここではすべてのキーの前にハイフン(-)があり、それらの周りに引用符は必要ありません-
%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);
しかし、単一の単語があることに注意することが重要です。つまり、スペースなしでこの形式のハッシュ形成でキーが使用されており、この方法でハッシュを構築する場合、キーは以下に示すようにハイフンのみを使用してアクセスされます。
$val = %data{-JohnPaul}
$val = %data{-Lisa}
ハッシュ要素へのアクセス
ハッシュから個々の要素にアクセスするときは、変数の前にドル記号($)を付けてから、変数の名前の後に中括弧内に要素キーを追加する必要があります。 たとえば-
#!/usr/bin/perl
%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);
print "$data{'John Paul'}\n";
print "$data{'Lisa'}\n";
print "$data{'Kumar'}\n";
これは、次の結果を生成します-
45
30
40
スライスの抽出
配列からスライスを抽出できるように、ハッシュのスライスを抽出できます。 @を使用する必要があります。値のリストになるため、返された値を保存する変数のプレフィックス-
#!/uer/bin/perl
%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);
@array = @data{-JohnPaul, -Lisa};
print "Array : @array\n";
これは、次の結果を生成します-
Array : 45 30
キーと値の抽出
あなたは、次の構文を持つ*キー*関数を使用して、ハッシュからすべてのキーのリストを取得することができます-
keys %HASH
この関数は、名前付きハッシュのすべてのキーの配列を返します。 以下は例です-
#!/usr/bin/perl
%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);
@names = keys %data;
print "$names[0]\n";
print "$names[1]\n";
print "$names[2]\n";
これは、次の結果を生成します-
Lisa
John Paul
Kumar
同様に、 values 関数を使用して、すべての値のリストを取得できます。 この関数の構文は次のとおりです-
values %HASH
この関数は、名前付きハッシュのすべての値で構成される通常の配列を返します。 以下は例です-
#!/usr/bin/perl
%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);
@ages = values %data;
print "$ages[0]\n";
print "$ages[1]\n";
print "$ages[2]\n";
これは、次の結果を生成します-
30
45
40
存在の確認
存在しないハッシュからキー/値のペアにアクセスしようとすると、通常は undefined 値を取得し、警告がオンになっている場合は、実行時に警告が生成されます。 これを回避するには、 exists 関数を使用します。この関数は、値が何であるかに関係なく、名前付きキーが存在する場合にtrueを返します-
#!/usr/bin/perl
%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);
if( exists($data{'Lisa'} ) ) {
print "Lisa is $data{'Lisa'} years old\n";
} else {
print "I don't know age of Lisa\n";
}
ここで、IF … ELSEステートメントを紹介しました。これについては、別の章で学習します。 現時点では、指定された条件が真の場合にのみ* if(condition)パーツが実行されると仮定します。そうでない場合は *else パーツが実行されます。 上記のプログラムを実行すると、次の結果が生成されます。ここで、指定された条件_exists($ data \ {'Lisa'} _はtrueを返すためです-
Lisa is 30 years old
ハッシュサイズの取得
サイズ、つまり、キーまたは値のスカラーコンテキストを使用してハッシュから要素の数を取得できます。 単に最初にあなたがキーまたは値のいずれかの配列を取得する必要があると言ってから、次のように配列のサイズを取得できます
#!/usr/bin/perl
%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);
@keys = keys %data;
$size = @keys;
print "1 - Hash size: is $size\n";
@values = values %data;
$size = @values;
print "2 - Hash size: is $size\n";
これは、次の結果を生成します-
1 - Hash size: is 3
2 - Hash size: is 3
ハッシュ内の要素の追加と削除
新しいキー/値のペアの追加は、単純な代入演算子を使用して1行のコードで実行できます。 しかし、ハッシュから要素を削除するには、例で以下に示すように*削除*機能を使用する必要があります-
#!/usr/bin/perl
%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);
@keys = keys %data;
$size = @keys;
print "1 - Hash size: is $size\n";
# adding an element to the hash;
$data{'Ali'} = 55;
@keys = keys %data;
$size = @keys;
print "2 - Hash size: is $size\n";
# delete the same element from the hash;
delete $data{'Ali'};
@keys = keys %data;
$size = @keys;
print "3 - Hash size: is $size\n";
これは、次の結果を生成します-
1 - Hash size: is 3
2 - Hash size: is 4
3 - Hash size: is 3