blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_0

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

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)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲