Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  1. Perl
  2. 標準関数
  3. here

keys関数 - ハッシュのすべてのキーを取得

keys関数を使用すると、ハッシュのすべてのキーを取得することができます。取得したキーの順序は不定です。

# すべてのキーを取得
my @keys = keys %hash;

ハッシュのリファレンスを引数として渡す場合は、デリファレンスする必要があります。

# すべてのキーを取得。ハッシュのリファレンスの場合。
my @keys = keys %$hash;

ハッシュのキーと値をすべて出力

keys関数を使って、ハッシュのすべてのキーとすべての値を出力してみます。

# キーの辞書順で並べ替えて出力
my $scores = {Ken => 1, Mike => 2, Rika => 3};
for my $person (sort keys %$scores) {
  print "$person : $scores->{$person}\n";
}

出力結果は以下のようになります。

Ken : 1
Mike : 2
Rika : 3

keys関数で得られるキーは順序が不定です。sort関数と組み合わせると安定した順序で出力することができます。

# キーの辞書順で並べ替えて出力
my $scores = {Ken => 1, Mike => 2, Rika => 3};
for my $person (sort keys %$scores) {
  print "$person : $scores->{$person}\n";
}

さらにreverse関数と組み合わせると、逆順で出力することができます。

# キーの辞書順で並べ替えて出力
my $scores = {Ken => 1, Mike => 2, Rika => 3};
for my $person (reverse sort keys %$scores) {
  print "$person : $scores->{$person}\n";
}

ハッシュの値をすべて取得する

ハッシュの値だけをすべて取得したい場合はvalues関数を使用することができます。

my @values = values %hash;

キーと値のペアを順番に取得する

キーと値のペアを順番に取得したい場合はeach関数を使うことができます。

# (キー, 値)のペアを順番に取得
my %age = (Ken => 19, Mike => 34);
while (my ($name, $age) = each %age) {
  ...
}

keys関数、values関数、each関数という似ている関数がありますが、ハッシュの処理にkeys関数を使うのがお勧めです。keys関数は、パフォーマンスもよく、三つの中で非常に活用のしやすい関数です。

  • Perlとはテキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。
  • Linuxサーバーでのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意
  • Perlはgitopensslなど広く普及したUnix/Linuxミドルウェアの補助ツールとして採用実績あり。後方互換性とポータビリティの高さがひとつの理由と推測。
  • 大量のテキストを扱うWeb開発も得意。ロングテールSEOを意識したWebサイト、アドテクやソーシャルゲームでの50ms以内のJSONの生成など。