my %values = ( 0 => 0, zero => '0', undef => undef, empty => '', 1 => 1, one => '1', string => 'string', ); printf ("%6s : %i : %i :: %i :: %i\n", $_, ($values{$_}?1:0), ( $values{$_} == 0), (($values{$_} or $values{$_} == 0)?1:0), (($values{$_} or $values{$_} eq 0)?1:0)) foreach sort keys %values; #### 0 : 0 : 1 :: 1 :: 1 1 : 1 : 0 :: 1 :: 1 empty : 0 : 1 :: 1 :: 0 one : 1 : 0 :: 1 :: 1 string : 1 : 1 :: 1 :: 1 undef : 0 : 1 :: 1 :: 0 zero : 0 : 1 :: 1 :: 1