Perl Perl_0
Perl 「 ハッシュ 」: ( Hash ) を keys と values で操作する (0x52)

目次 - Perl Index
Theme
Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x52 回。
Perl 「 ハッシュ 」のデータを、keys 関数と values 関数を使って操作する。
key 関数と value 関数
Perl には、ハッシュを操作するために「 keys 」と「 values 」という関数が用意されています。
「 keys 」関数は、ハッシュに格納された key を取り出し、「 values 」関数は、value を取り出しますが、いずれの関数も、ハッシュ専属という訳ではありません。
引数には、「 ハッシュ 」の他に、「 配列 」「 EXPR (式) 」を指定出来ます。書式は次の通りです。
keys HASH
keys ARRAY # Perl 5.12 から
keys EXPR # Perl 5.14 から
values HASH
values ARRAY # Perl 5.12 から
values EXPR # Perl 5.14 から
しかしながら、僕個人にとって、これらの関数はハッシュ専属です。なぜなら、僕が Perl 5.8 を使っているからです。
key 関数を利用する
keys 関数を利用してみます。
keys 関数は、リストコンテキストでは該当する key のリストを返し、スカラコンテキストでは key の数を返します。
my %my_hash = (
key1 => 'value1',
key2 => 'value2',
key3 => 'value3',
);
@key_array = keys %my_hash;
$key_num = keys %my_hash;
print "keys : @key_array\n";
print "number: $key_num\n";
print 文の実行結果は次の通りです。
keys : key2 key1 key3
number: 3
key のリストは、ハッシュらしく順不同です。
value 関数を利用する
values 関数も同様に、リストコンテキストでは該当する value のリストを返し、スカラコンテキストでは value 数を返します。
@val_array = values %my_hash;
$val_num = values %my_hash;
print "value : @val_array\n";
print "number: $val_num\n";
print 文の実行結果は予想通りです。
value : value1 value2 value3
number: 3
key と value の順序
keys/values 関数を利用した場合、それぞれの値は順不同のリストデータになりますが、keys/values 関数が取り出す順序は同じものになります。
つまり、keys 関数のリストの 1 番目が「 key3 」なら、values 関数のリストの 1 番目も「 value3 」になるということです。
ただし、途中でハッシュのデータに操作が加えられた場合はその限りではありません。
0x52 -> 0x53 へ
次回は、予約された組み込み変数「 %ENV 」と keys/values 関数を利用して、システム環境の環境変数を確認します。
参考情報は書籍「 初めての Perl 第 6 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。
目次 - Perl Index
Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)