my @deletable_ids = qw( 1 2 3 ); my $delete_at_a_time = 100; while ( @deletable_ids ) { my @delete_now; if ( scalar @deletable_ids > $delete_at_a_time ) { @delete_now = splice @deletable_ids, 0, $delete_at_a_time; } else { @delete_now = @deletable_ids; @deletable_ids = (); } my $in_clause = join q{,}, @delete_now; $dbh->do( "DELETE FROM t WHERE blah IN ($in_clause)" ); } #### my $qmarks = join q{,}, map { '?' } @delete_now; $dbh->do( "DELETE FROM t WHERE blah IN ($qmarks)", undef, @delete_now );