#!/usr/bin/perl

sub or3 {
    return $_[0] if $_[0];
    return $_[1] if $_[1];

    return 0     if defined $_[0] && defined $_[1];

    return undef;
}

sub and3 {
    return $_[1] if $_[0];
    return $_[0] if $_[1];

    return 0     if defined $_[0] || defined $_[1];

    return undef;
}

sub not3 {
    return defined $_[0] ? ! $_[0] : undef;
}

print "0 or 0 is: ",          or3(0, 0),          "\n";
print "0 or 1 is: ",          or3(0, 1),          "\n";
print "0 or $undefined is undefined.\n" unless defined( or3(0, $undefined) );

print "1 and 1 is: ",          and3(1, 1),          "\n";
print "0 and 1 is: ",          and3(0, 1),          "\n";
print "1 and $undefined is undefined.\n" unless defined( and3(1, $undefined) );

print "not 1 is: ",          not3(1),          "\n";
print "not 0 is: ",          not3(0),          "\n";
print "not $undefined is still undefined.\n" unless defined( not3($undefined) );


