my %quarternames = (1 => 'first', 2 => 'second', 3 => 'third', 4 => 'fourth'); my %tablenames = map { $_ => "$quarternames{$_}quarter" } keys %quarternames; my %queries = map { $_ => " SELECT * FROM $tablenames{$_} WHERE userid = ? AND period = ? AND gradetype = ? " } keys %tablenames; sub termgrades { my $period = shift; my $quarter = shift; my $sth; return undef unless exists $queries{$quarter}; $sth = $dbh->prepare_cached($queries{$quarter}) or do { error ("2", "Could not prepare query for $quarternames{$quarter} quarter for $userdata[0]: $dbh->errstr"); return undef; }; $sth->execute($userdata[0], $period, 2) or error("2", "Could not execute query for $quarternames{$quarter} quarter for $userdata[0]: $sth->errstr"); return $sth; }