#! 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'ではなくなっている。
print "\n";
#◎sort(keys(%hash))で、文字コードの小さい順に並べ替えてみる
#my %sorted = sort(keys(%hash));
foreach (sort(keys(%hash))){
my $value = $hash{$_};
print "$_ →$value\n";
}
print "\n";
#◎sort{$hash{$a}<=>$hash{$b}}⇒文字コードではなく数字の代償で並び替える
my %hash1 = (
'billy'=>111,
'lally'=>11,
'haney'=>58,
'come'=>589,
);
foreach (sort{$hash1{$a}<=>$hash1{$b}}(keys(%hash1))){
my $value = $hash1{$_};
print "$_→$value\n";
}
print "\n";
foreach (sort(keys(%hash1))){
my $value = $hash1{$_};
print "$_→$value\n";
}