for ( 0 .. $#fields) { %sql_data = %{$fields[$_]}; ... insert into DB ... } #### foreach my $sql_data ( @fields ) { $stmt = qq/INSERT INTO temp_sheet (/ . join(',', keys %$sql_data ) . qq/) VALUES (/ . join(',', ('?') x keys %$sql_data ) . qq/)/; $dbh->do( $sql, {}, values %$sql_data ); } #### use SQL::Abstract; my $sql = SQL::Abstract->new; foreach my $data (@fields){ my($stmt, @bind) = $sql->insert('temp_sheet', $data); $dbh->do( $stmt, {}, @bind ); }