in reply to Simplifying the following code

Fastolfe is, as usual, correct about putting the files into a loop.

To delve further into what Kanji was saying, you can avoid the object-oriented syntax (which is unnecessary here) by putting

use CGI qw/:cgi/;
at the top of your code. I'd avoid using all the temporary variables ('$virtual_tour' etc.) if I were you. There's no harm in using param('xxx') every time you want a variable, and every needless temporary variable adds to the confusion factor of your code ("Have I initialized $virtual_tour yet? Where?"). If you need to interpolate the variables into a string, you can use:
print STDOUT "The tax year is @{[ param('TAX_YEAR') ]}";
Or, better,
print STDOUT "The tax year is ", param('TAX_YEAR');
The only drawback of using 'param' all over the place is the possibility of misspelling some parameter names, which won't be detected by perl, even with '-w'. If this is a problem, you can define your parameter names as constants like so:
use constant DOWNPAYMENT => 'DOWNPAYMENT';
That might be overkill, but offers the advantage of having all of your parameter names in a single place. Then you can say:
print STDOUT "Downpayment is: ", param(DOWNPAYMENT);
but misspelling would give a compile-time error if you 'use strict' and -w (and you are, of course, yes? :) )
# Gives an error print STDOUT "Downpayment is: ", param(DOWNPAMENT);
Best of luck...

stephen