---------------------------------------------------------
$this && $that | If $this is true, return $that,
$this and $that | else return $this.
-----------------+---------------------------------------
$this || $that | If $this is true, return $this,
$this or $that | else return $that.
---------------------------------------------------------
####
my ($first, $second) = ( 1, 1 );
print "Truth\n" if $first++ && $second++;
print "First: $first\nSecond: $second\n";
__OUTPUT__
Truth
First: 2
Second: 2
##
##
my ($first, $second) = ( 1, 0 );
print "Truth\n" if $first++ && $second++;
print "First: $first\nSecond: $second\n";
__OUTPUT__
First: 2
Second: 1
# Note: Both are evaluated because the first one is
# true. But "Truth" isn't printed, because only one
# of the two expressions evaluated "true".
##
##
my ($first, $second) = ( 0, 1 );
print "Truth\n" if $first++ && $second++;
print "First: $first\nSecond: $second\n";
__OUTPUT__
First: 1
Second: 1
# $second didn't get incremented because the
# evaluation stopped when $first evaluated false.
##
##
my ($first, $second) = ( 0, 0 );
print "Truth\n" if $first++ && $second++;
print "First: $first\nSecond: $second\n";
__Output__
First: 1
Second: 0
# $first was evaluated for truth. It was false,
# so $second didn't get evaluated.
##
##
my ($first, $second) = ( 1, 1 );
print "Truth\n" if $first++ || $second++;
print "First: $first\nSecond: $second\n";
__OUTPUT__
Truth
First: 2
Second: 1
# Since $first is true, no need to evaluate $second;
# we already know that the 'or' expression is true.
##
##
my ($first, $second) = ( 1, 0 );
print "Truth\n" if $first++ || $second++;
print "First: $first\nSecond: $second\n";
__OUTPUT__
Truth
First: 2
Second: 0
# Again, $second is never evaluated because $first
# is true, and that's good enough for ||.
##
##
my ($first, $second) = ( 0, 1 );
print "Truth\n" if $first++ || $second++;
print "First: $first\nSecond: $second\n";
__OUTPUT__
Truth
First: 1
Second: 2
# Both sides got evaluated because since $first was
# false it was necessary to evaluate $second to
# determine if truth exists (it does).
##
##
my ($first, $second) = ( 0, 0 );
print "Truth\n" if $first++ || $second++;
print "First: $first\nSecond: $second\n";
__OUTPUT__
First: 1
Second: 1
# There is no truth. Both expressions were
# evaluated to find it.
##
##
open( FILE, "##
local $_ = 'xyz';
SWITCH: {
/^abc/ && do { $abc = 1; last SWITCH; };
/^def/ && do { $def = 1; last SWITCH; };
/^xyz/ && do { $xyz = 1; last SWITCH; };
$default = 1;
}
##
##
if ( $this && $that && $other ) { print "Truth\n"; }
##
##
my $client = $ENV{USER_HOST} ||
$ENV{USER_ADDR} ||
"UNKNOWN";
##
##
my @sorted = sort { uc($a) cmp uc($b) || $a cmp $b } @unsorted;
##
##
my @list = ( { 'Name' => "Pete", 'Age' => 32 },
{ 'Name' => "Pete", 'Age' => 55 } );
my @sorted = sort { $a->{'Name'} cmp $b->{'Name'} ||
$a->{'Age' } <=> $b->{'Age' } } @list;
##
##
open ( FILE, "