【perl】values関数、each関数、exists関数、delete関数〜ハッシュの値を返す、キーと値を取り出す、値が存在するか確認する、値を削除する

#! usr/bin/perl

use strict;
use warnings;

#◎関数values=>hashの値を返す関数
my %hash1=(
	'koma'=>55,
	'gema'=>11,
	'baba'=>35,
	'italy'=>777,
	'france'=>454,
	9=>'hello'
);

my @keys = keys(%hash1);
my @value = values(%hash1);

print "@keys\n";  #出力結果=>koma italy gema 9 france bsba
print "@value\n"; #出力結果=>55 777 11 hello 454 35

print "\n";


#◎関数each=>hashに含まれるキーと値を一組ずつ取り出す
#以下2通りだと、eachを使うほうがメモリ消費が少なくてすむ
while (my($key,$value) = each(%hash1)){
	print "$key→$value\n";
}

print "\n";

#上のwhile文と同じ結果が出るよ。
foreach (keys(%hash1)){
	print "$_→$hash1{$_}\n";
}

print "\n";

#◎関数exists=>ハッシュの値があるかどうかをチェックする(引数は、ハッシュか配列の要素。ハッシュ・配列そのものは引数にできない。)
my %hash2;

if (exists($hash1{italy})){
	print "hasu2の値は存在するよ。\n";
}

=head
#そもそも存在しないキーについては、使えない。(エラーがでるよ)
if (exists(%hash1{10})){
	print "存在するよ\n";
}else{
	print "存在しないよん\n";
}
=cut

print "\n";

#◎関数delete=>delete $hash{$key};=>ハッシュからキーに対応する値を削除する
print delete $hash1{baba}"\n\n";

foreach (keys(%hash1)){
	print "$_→$hash1{$_}\n";
}#出力結果=>babaとbabaの値35以外がprintされる。

print "\n";

#◎undef %hash; =>hashから全てのキーと値を削除する
undef %hash1;

foreach (keys(%hash1)){
	print "$_→$hash1{$_}\n";
}#出力結果=>なにも表示されない=全て削除されちゃった。