【perl】ハッシュ〜キーと値、内容表示、内容追加〜

忙しいほど、計画的に動けるものですね。さて、今日はハッシュの復習。

#! usr/bin/perl

use strict;
use warnings;

#◎【基本】%ハッシュ名(キー => 値); => キーは文字列、値はスカラー
my %hash = (
	'komage' => 1,
	'gomage' => 2,
	'mamage' => 3,
	'papage' => 'パパです。'
);

print $hash {'gomage'}."\n";
print $hash {'papage'}."\n";
#print "$hash {'papage'}\n"; #この書き方はだめだって。
print q($hash {'papage'})."\n";#出力結果 => $hash {'papage'} =>print '$hash {'papage'}'だとエラー。

print "\n";


#◎【keys関数】keys(%hash); => ハッシュ%hashに含まれているすべてのキーをリストで返す
#※キーのリストは、順番は宣言した通りにはならない→perlのバージョンによって順番が違う。(ハッシュに順番という概念はないから)
foreach my $key (keys(%hash)){
	my $value = $hash{$key};
	print "$key →$value\n";
}

#以下の書き方でもおっけー。
foreach (keys(%hash)){
	my $value = $hash{$_};
	print "$_ →$value\n";
}

print "\n";


#◎キーとキーの数を返す
my @key1 = keys(%hash);#配列に代入すると、キーが返る(順番はperlのバージョンによって違う)
print "@key1\n";#出力結果 => mamage papage gomage komage

my $key1 = keys(%hash);#スカラーに代入すると、キーに数が返る
print "$key1\n";#出力結果 => 4

print "\n";


#◎$hash{$key} = $value; => キーと値の追加

=head
#これ↓は追加ではなく、ハッシュ%hashの書き換え。
%hash =(
	'boroge' => 'abcd',
	'foroge' => 123456
);

foreach (keys(%hash)){
	my $value = $hash{$_};
	print "$_ →$value\n";
}
=cut

#以下だと、ちゃんと追加できる。
$hash {'boroge'} = 'abcd';#「=>」ではなく「=」なのに注意
$hash {'foroge'} = 123456;

foreach (keys(%hash)){
	my $value = $hash{$_};
	print "$_ →$value\n";
}

print "\n";


#◎同じキーを使うと、本当に上書きされるのか。
$hash {'boroge'} = '上書きされた?';#すでに登場しているキー'boroge'に別の値を入れてみる。

print $hash {'boroge'},"\n";#出力結果 => 上書きされた? =>値が'abcd'ではなくなっている。