I assume that you want all tuples in which each column contains the corresponding column from either A or B.
Here is one way to do it:
use strict;
use warnings;
my @A = qw(1 10 100 1000);
my @B = qw(2 20 200 2000);
my $sum = 0;
foreach my $fac1 ($A[0], $B[0]) {
foreach my $fac2 ($A[1], $B[1]) {
foreach my $fac3 ($A[2], $B[2]) {
foreach my $fac4 ($A[3], $B[3]) {
my $prod = $fac1 * $fac2 * $fac3 * $fac4;
$sum += $prod;
printf "%5d %5d %5d %5d: %.0f\n", $fac1, $fac2, $fac3,
+ $fac4, $prod;
}
}
}
}
print $sum;
Update: Corrected computation of products. Added print for debugging.