use strict; use warnings; my @valueNames = qw/major minor revision/; my %oldVersions = ( aht => {major => 8, minor => 3, revision => 6}, dog => {major => 3, minor => 3, revision => 1}, ); my %versionEdits = ( aht => {major => 9, minor => 4, revision => 0}, dog => {revision => 2}, ); for my $version (sort keys %versionEdits) { my %values; $values{$_} = $oldVersions{$version}{$_} for @valueNames; for my $edit (sort keys %{$versionEdits{$version}}) { my $newValue = $versionEdits{$version}{$edit}; print "Update $version set $edit = $newValue #DBVersion "; print join '.', @values{@valueNames}; print "\n"; $values{$edit} = $newValue; } } #### Update aht set major = 9 #DBVersion 8.3.6 Update aht set minor = 4 #DBVersion 9.3.6 Update aht set revision = 0 #DBVersion 9.4.6 Update dog set revision = 2 #DBVersion 3.3.1