В коде нет ничего плохого. Однако использование таблицы поиска было бы проще (и более гибким):
my $driver = 'dbi:Oracle:';
my %dbihosts = (
host1 => 'dbhost1',
host2 => 'dbhost2',
host3 => 'dbhost3',
host4 => 'dbhost3',
);
my $hostname = "host2";
die "Unknown host '$hostname'" unless exists $dbihosts{ $hostname };
my $dbhost = $dbihosts{ $hostname };
print "$hostname -> $dbhost\n";
$dbh->connect("$driver$dbhost", ...);
PS: Вы забыли chomp $hostname
?