sub formatpages($$) { # pick parameters my($act, $max, $min) = (@_, 1); # pick pages to link my @pages = map { { text => $_, link => 1 } } grep { $_ >= $min && $_ <= $max } $act-2 .. $act+2; # may add first page if ($pages[0]->{text} > $min) { if ($pages[0]->{text} > $min+2) { unshift(@pages, { text => $min, link => 1 }, { text => '...', link => 0 }); } else { unshift(@pages, { text => $_, link => 1 }) for reverse $min .. $pages[0]->{text}-1; } } # may add last page if ($pages[-1]->{text} < $max) { if ($pages[-1]->{text} < $max-2) { push(@pages, { text => '...', link => 0 }, { text => $max, link => 1 }); } else { push(@pages, { text => $_, link => 1 }) for $pages[-1]->{text}+1 .. $max; } } # return pagelist return @pages if wantarray(); return \@pages; } # formatpages