#!/usr/bin/perl -w
use strict;
my @zero = (0, 7);
my @negative = (-7, 7);
my @seq = (1, 2, 3, 4);
# for loop versions still win at golf, behold:
# sub sum{$t=0;$t+=$_ for@_;$t}
# sub sum{(sort{($a+=$b)&0}@v=@_)[0]}
sub sum { (sort { ($a += $b) & 0 } my @v = @_)[0] }
# sub product{$t=1;$t*=$_ for@_;$t}
# sub product{(sort{($a*=$b)&0}@v=@_)[0]}
sub product { (sort { ($a *= $b) & 0 } my @v = @_)[0] }
# but the single-statement (no semicolons)
# nature of the sort version is my fetish.
print sum(@zero) . " = 7\n";
print sum(reverse @zero) . " = 7\n";
print sum(@negative) . " = 0\n";
print sum(reverse @negative) . " = 0\n";
print sum(@seq) . " = 10\n";
print sum(reverse @seq) . " = 10\n";
print product(@zero) . " = 0\n";
print product(reverse @zero) . " = 0\n";
print product(@negative) . " = -49\n";
print product(reverse @negative) . " = -49\n";
print product(@seq) . " = 24\n";
print product(reverse @seq) . " = 24\n";