$sum = eval join ' + ', @addends;
####
$all_true = eval join ' && ', @flags;
####
sub AND { ! grep !$_, @_ }
sub OR { !!grep $_, @_ }
####
DB<1> p AND()
1
DB<2> p AND(0)
DB<3> p AND(1)
1
DB<4> p AND(2, 3, 0, 1)
DB<5> p OR()
DB<6> p OR(1)
1
DB<7> p OR(2, 3, 0, 1)
1
####
use List::Util 'first';
sub AND { ! first { !$_ } @_ }
sub OR { !!first { $_ } @_ }
####
DB<1> p OR(0)
DB<2> p OR()
DB<3> p OR(1)
1
DB<4> p OR(undef, 2, 0, 'x')
1
####
DB<1> p AND(0)
1
DB<2> p AND()
1
DB<3> p AND(1)
1
DB<4> p AND(undef, 2, 0, 'x')
1
####
sub AND { $_ || return 0 for @_; 1 }
sub OR { $_ && return 1 for @_; 0 }
__END__
DB<1> p AND(0)
0
DB<2> p AND()
1
DB<3> p AND(1)
1
DB<4> p AND(undef, 2, 0, 'x')
0
DB<5> p OR(0)
0
DB<6> p OR()
0
DB<7> p OR(1)
1
DB<8> p OR(undef, 2, 0, 'x')
1
####
use List::Util 'reduce';
sub add { reduce { $a + $b } ( 0, @_ ) }
sub mult { reduce { $a * $b } ( 1, @_ ) }