--- /dev/null
+#!/usr/bin/perl -w
+
+use v5.42;
+use List::Util qw(sum);
+
+my @map = map { [ /\S+/g ] } <>;
+my $xmax = $#{ $map[0] };
+my $ymax = $#map;
+
+my @sums;
+
+for my $x (0 .. $xmax) {
+ $sums[$x] = $map[$ymax][$x] eq '+' ? 0 : 1;
+ for my $y (0 .. $ymax-1) {
+ if ($map[$ymax][$x] eq '+') {
+ $sums[$x] += $map[$y][$x];
+ } else {
+ $sums[$x] *= $map[$y][$x];
+ }
+ }
+}
+
+say sum @sums;
--- /dev/null
+#!/usr/bin/perl -w
+
+use v5.42;
+
+my @map = map { chomp; [ split // ] } <>;
+my $xmax = $#{ $map[0] };
+my $ymax = $#map;
+
+my ($sum, $imm, $op);
+
+for my $x (0 .. $xmax) {
+ if ($map[$ymax][$x] ne ' ') {
+ $op = $map[$ymax][$x];
+ $imm = $op eq '*';
+ }
+ my $expr = "\$imm $op= ";
+ $expr .= $map[$_][$x] for 0 .. $ymax-1;
+ if ($expr =~ /\d/) {
+ eval $expr;
+ } else {
+ $sum += $imm;
+ }
+}
+$sum += $imm;
+
+say $sum;