in reply to DBI:CSV problem

You also have an internal set of quotes on the second SQL statement. Here's a better solution:
$dbh->do(q{ INSERT INTO test_db VALUES (?,?,?,?,?) } undef, @fields);
That's lifted straight out of the Perl DBI book. Not only do you need to pass values to fill in placeholders as list elements, you don't need an extra set of quotes when you use the q// operator. They're implied.

Here's what I think you might have been trying to do:

my $sql = q{INSERT INTO test_db VALUES(} . join(', ', (undef, @fields)). ')';