Use a hash to store the original version values and another to store the edits then you can:
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; } }
Prints:
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
which scales nicely as you add more things you are tracking versions of. The general rule is - if there is more than one, put it in a data structure. If you find you are using a proliferation of variables you have probably gone about it in the wrong way. If you find yourself writing the same piece of code over again you have probably gone about it the wrong way.
In reply to Re: Trying to avoid 9 conditionals
by GrandFather
in thread Trying to avoid 9 conditionals
by techsan02
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |