use POSIX 'ceil'; my @things = 1 .. 42; my $per_page = 20; my $num_pages = ceil( @things / $per_page ); my $page = param('page') || 1; ## verify page num is within range $page = 1 if $page < 1; $page = $num_pages if $page > $num_pages; my $first = ($page-1) * $per_page; my $last = $first + $per_page - 1; $last = $#things if $last > $#things; print @things[ $first .. $last ];