Вот пример абсолютно рабочего запроса подобного типа(данные уже считанны из файла и занесены в массив):
my $insert = "INSERT INTO  $table (time_stamp,elaps,client_ip,
    type_http,
    size,
    method,
    url,
    ident,
    host_name,
    mime,
    chanel) VALUES (?,?,?,?,?,?,?,?,?,?,?)";
foreach my $line_arr (@access_arr_in) {
	
	
my ($time_stamp,$elaps,$client_ip,$type_http,$size,$method,$url,$ident,$host_name,$mime,$chanel)=split(/[\\s\\t]+/,$line_arr);
	
$time_stamp=int $time_stamp;
	
chomp $chanel;
	
$sth->execute ($time_stamp,$elaps,$client_ip,$type_http,$size,$method,$url,$ident,$host_name,$mime,$chanel);
}
$sth->finish; 
гораздо проще, по моему разумению, считать в массив и от туда загонять данные в базу. Врят ли у вас гигабайтные фалы...
Потом проще отработать сие на простом массиве в одну две записи и вы сразу же увидите проблему, причем, желательно весь запрос проверить сначала в mysql.
Возможно у вас не совпадают тип столюца с вводимыми данными.
P.S.:
там где split должно быть так (неотображает):
my ($time_stamp,$elaps,$client_ip,$type_http,$size,$method,$url,$ident,$host_name,$mime,$chanel)=split(/[\\s\\t]+/,$line_arr);