関数順 インデックス
目的別 インデックス

構文
 
 defined 確認対象

返り値
 
 定義されている場合に真

説明

  • 確認対象が定義されているかどうかを返します。
  • ハッシュのキーが存在するかどうかを確認する場合は,definedではなくexistsを使って下さい。

使用例

確認方法と値(0・空文字・未定義値)の違いによる真偽の違いを見る
#!/usr/bin/perl
use strict;
use warnings;

my $foo = 0;
my $bar = "";
my $baz;

print "\$fooの確認\n";
show_check_result($foo);

print "\n";
print "\$barの確認\n";
show_check_result($bar);

print "\n";
print "\$bazの確認\n";
show_check_result($baz);

sub show_check_result {
  my $val = shift;
  
  if ($val) {
    print "1: True\n";
  }
  if ($val ne "") {
    print "2: True\n";
  }
  if (defined $val) {
    print "3: True\n";
  }
}
※上の例では未定義値に対してneを使うので,実行時に警告が出ます。 警告を出さないようにするには,普段スクリプトを書く際にはdefinedで確認するか,変数を未定義にはせず空文字にする等の対策を取って下さい

definedとexistsの違いを見る
#!/usr/bin/perl
use strict;
use warnings;

my %foo = (
  'hoge' => 1,
  'fuga' => undef, # 未定義値
);

if (defined $foo{hoge}) {
  print '$foo{hoge} defined', "\n";
} else {
  print '$foo{hoge} not defined', "\n";
}

if (exists $foo{hoge}) {
  print '$foo{hoge} exists', "\n";
} else {
  print '$foo{hoge} not exists', "\n";
}

print "-----\n";

if (defined $foo{fuga}) {
  print '$foo{fuga} defined', "\n";
} else {
  print '$foo{fuga} not defined', "\n";
}

if (exists $foo{fuga}) {
  print '$foo{fuga} exists', "\n";
} else {
  print '$foo{fuga} not exists', "\n";
}

print "-----\n";

if (defined $foo{piyo}) {
  print '$foo{piyo} defined', "\n";
} else {
  print '$foo{piyo} not defined', "\n";
}

if (exists $foo{piyo}) {
  print '$foo{piyo} exists', "\n";
} else {
  print '$foo{piyo} not exists', "\n";
}