my @valueNames = qw/major minor revision/; my @versions = ( [qw(aht 8.3.6 9.4.0)], [qw(dog 3.3.1 3.3.2)], ); for my $version (@versions) { my ($app, $oldStr, $newStr) = @$version; my %old; my %new; @old{@valueNames} = split /\./, $oldStr; @new{@valueNames} = split /\./, $newStr; for my $name (@valueNames) { $oldVersions{$app}{$name} = $old{$name}; next if $new{$name} == $old{$name}; $versionEdits{$app}{$name} = $new{$name}; } }