клиент запросил 3-ю страницу ($page)
получаем конечную позицию $end=$page*20
соответственно стартовая позиция $start=$end-19
получилось (start=41 end=60)
теперь читаем данные из базы данных и считаем
@lines=
;
$i=1;
foreach $line(@lines){
if ($i>=$start and $i<=$end){print "$line\\n"}#если в диапазоне то выводим результаты
$i++}
ну это основа, остальное додумай сам