Check whether a value exists before using it.

defined-check `defined` distinguishes a missing value from a present scalar.

Defined Checks

maybe
defined_checks.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;

my $maybe = "ready";
my $status = defined $maybe ? "present" : "missing";
my $value = defined $maybe ? $maybe : "fallback";

print "status=$status\n";
print "value=$value\n";
use strict;
use warnings;

my $maybe = undef;
my $status = defined $maybe ? "present" : "missing";
my $value = defined $maybe ? $maybe : "fallback";

print "status=$status\n";
print "value=$value\n";
use strict;
use warnings;

my $maybe = "done";
my $status = defined $maybe ? "present" : "missing";
my $value = defined $maybe ? $maybe : "fallback";

print "status=$status\n";
print "value=$value\n";
  1. $maybe ← ready, $status ← present, $value ← ready

    4my $maybe→ ready = "ready"; #@maybe=undef, "done"5my $status→ present = defined $maybeready ? "present" : "missing";6my $value→ ready = defined $maybeready ? $maybe : "fallback";78print "status=$statuspresent\n";9print "value=$valueready\n";
    outputstatus=present
    value=ready
  1. $maybe ← (empty), $status ← missing, $value ← fallback

    4my $maybe→ (empty) = undef;5my $status→ missing = defined $maybe(empty) ? "present" : "missing";6my $value→ fallback = defined $maybe(empty) ? $maybe : "fallback";78print "status=$statusmissing\n";9print "value=$valuefallback\n";
    outputstatus=missing
    value=fallback
  1. $maybe ← done, $status ← present, $value ← done

    4my $maybe→ done = "done";5my $status→ present = defined $maybedone ? "present" : "missing";6my $value→ done = defined $maybedone ? $maybe : "fallback";78print "status=$statuspresent\n";9print "value=$valuedone\n";
    outputstatus=present
    value=done