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; } }