Perl入門ゼミ

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

exists関数 - ハッシュのキーの存在確認

exists関数を使用するとハッシュのキーの存在を確認することができます。

# ハッシュのキーの存在確認
my $is_exists = exists $hash{$key};

ageというキーが存在するかを確認するには以下のようにします。

# ageというキーが存在することを確認
my %person = (name => 'Ken', age => 1);
my $is_exists = exists $person{age};

ハッシュのリファレンスの場合には以下のようにすることができます。

# キーの存在確認。ハッシュのリファレンスの場合。
my $person = {name => 'Ken', age => 1};
my $is_exists = exists $person->{age};

defined関数との違い

よく似た関数にdefined関数があります。exists関数がハッシュのキーの存在を調べるのに対して、defined関数は値が定義されているかどうかを調べるのに利用します。

my $defined = defined $person{age};

サンプルプログラム

exists関数でハッシュの要素の状態を調べるサンプルです。

use strict;
use warnings;
use Data::Dumper;

# 生徒の数学の点数
my %math_scores = (
  Aiko => 89,
  Kenta => 0,
  Taro => undef
);  

print Dumper \%math_scores;
print "\n";

# 1: キーの存在を確認する exists関数
print "1: キーの存在を確認する\n";
for my $key (qw/Aiko Kenta Taro Masao/) {
  if (exists $math_scores{$key}) {
    print "\$math_scores{$key} は存在します。\n";
  }
  else {
    print "\$math_scores{$key} は存在しません。\n";
  }
} 

実行結果

%math_scores = (
                 'Aiko' => 89,
                 'Kenta' => 0,
                 'Taro' => undef
               );

1: キーの存在を確認する
$math_scores{Aiko} は存在します。
$math_scores{Kenta} は存在します。
$math_scores{Taro} は存在します。
$math_scores{Masao} は存在しません。
Giblog