There was a thread not too long ago that was pretty much exactly what you're asking: SQL Paging with Perl
I believe my reply was a suitable response -- use SQL::Abstract::Limit. Here is the snippet i posted in my reply:
use SQL::Abstract::Limit;
my $sql = SQL::Abstract::Limit->new( limit_dialect => 'Top' );
# generate SQL:
my ( $stmt, @bind ) = $sql->select( $table, \@fields, \%where, \@order
+, $limit,
+$offset );
# Then, use these in your DBI statements
my $sth = $dbh->prepare( $stmt );
$sth->execute( @bind );
--
"Go up to the next female stranger you see and tell her that her "body is a wonderland."
My hypothesis is that she’ll be too busy laughing at you to even bother slapping you." (src)