in reply to Any security holes?

Security aside

open(my $fh, '>>', 'drivers.html');

Why not have open tell you why something failed? ...or die "File append failure: $!";

print "Content-type:text/html\r\n\r\n";

Why are you adding this for every entry? There should be a single Content-Type header. HTML files don't need a content type header, but should be valid, what you're writing isn't.

It'd make a lot more sense to store these values in a database, and display using a template. It looks like you're getting started, I'd suggest not using CGI, if you want to make web development fun and avoid footguns I'd suggest looking at Mojolicious::Lite (Tutorial) with DBD::SQLite, also CGI::Alternatives.