+for my $unit (@{$units}) {
+ for my $upgrade (@{ $unit->{upgrade} // $unit->{update} // [] }) {
+ while (my ($col, $increase) = each %{$upgrade}) {
+ defined $unit->{$col} or next;
+
+ if (ref $increase eq 'ARRAY') {
+ for my $incrow (0 .. $#{$increase}) {
+ while (my ($inccol, $subinc) = each %{ $increase->[$incrow] }) {
+ $unit->{upgraded}->{$col}->[$incrow]->{$inccol}
+ //= ref $unit->{$col}->[$incrow]->{$inccol}
+ ? $unit->{$col}->[$incrow]->{$inccol}->[-1]
+ : $unit->{$col}->[$incrow]->{$inccol};
+ $unit->{upgraded}->{$col}->[$incrow]->{$inccol}
+ += ref $subinc ? $subinc->[-1] : $subinc;
+ }
+ }
+ }
+ elsif ($increase =~ /^-?[0-9.]+/) {
+ $unit->{upgraded}->{$col} //= $unit->{$col};
+ $unit->{upgraded}->{$col} += $increase;
+ }
+ }
+ }
+}
+