$sth->bind_param( $i++, $holidays->{$name}->{$_} ) foreach keys %{$holidays->{$name}}; #### $sth->bind_param( $i++, $holidays->{$name}->{$_} ) foreach qw/ name date type federal active /; #### use SQL::Abstract; my $sql = SQL::Abstract->new; while( my ($name,$data) = each %holidays ) { my %data = ( %$data, name => $name ); # assuming hash only has keys corresponding to cols in table my($stmt, @bind) = $sql->insert('your_table_name', \%data); $dbh->do($stmt, {}, @bind); }