my $pages = 25;
my $curr_page = 13;
my $page_size = 6;
my ( $links, $curr_range) = pager("/cgi-bin/script.pl", $pages, $curr_page, $page_size);
print "Current page array[$curr_page] display range $curr_range\n\n", $links;
sub pager {
my ( $link, $total, $curr_page, $page_size ) = @_;
$link .= $link =~/\?/ ? "&" : '?';
$curr_page ||= 0;
$page_size ||= 6;
my @links;
my $current_range = 'Unkown';
for ( my $start = 0; $start < $total; $start += $page_size ) {
my $end = ($start+$page_size)>$total ? $total : $start+$page_size;
my $range = $start+1 == $end ? $start+1 : sprintf "%d-%d", $start+1, $end;
$end -=1; # we show 1-10 but this is 0-9 in array terms
push @links, ($curr_page >= $start and $curr_page <= $end) ? "$range\n"
: qq!$range\n!;
$current_range = $range if ($curr_page >= $start and $curr_page <= $end);
}
return (join ' | ', @links) , $current_range;
}
__DATA__
Current page array[13] display range 13-18
1-6
| 7-12
| 13-18
| 19-24
| 25