Abaixo está o código completo, e '#' são as explicações:
#!/usr/bin/perl
print "Content-type:text/html\n\n";
$arquivo = "bd.txt";# Arquivo de 'notícias, foruns, etc...'
$porpagina = "10";# Número de 'linhas para exibir' por página
#####################################################
$vendo = $ENV{'QUERY_STRING'}; # Gere a querystring
open (bd,"$arquivo"); # Abre o bd
@bd = reverse<bd>; # Copia seu conteúdo em ordem inversa para uma array
close(bd); # Fecha o bd
$todos=@bd; # Conteúdo de @bd = $todos
if ($vendo eq "") { # Se a querystring estiver vazia...
$vendo = "$porpagina"; # Querystring = número de linhas por página
}
$dim = $vendo - $porpagina; # $dim igual a querystring menos linhas p/ página
$valor=$dim+1; # $valor é igual a querystring+1
$inicio = 0; # Cria variável com valor 0
foreach (@bd) { # Para cada linha...
($nome) = split(/\|/, $_); # Divide '|' caso tenha mais valores
++$inicio; # Incrementa $inicio
if ($inicio > $dim) { # Se o início for maior que $dim...
if ($inicio <= $vendo) { # Se início for menor que querystring...
print qq~
$nome<hr> ~; # Exibe o nome
}
}
}
####################################
# Cria flexinha pra trás #
if ($dim >= $porpagina) {
print "<a href=?$dim>«</a>"; # Mostra a flexinha
} else {
}
####################################
$paginas = $todos / $porpagina; # Divide cada ítem por pagina e gera o número de páginas necessárias
for($i=0;$i<$paginas;$i++) { # Enquanto as páginas não forem alcançadas
$aaa = $i; # $aaa igual a $i
$aaa++; # $aaa mais um
$link = $aaa * $porpagina; # O link é igual à $aaa vezes 10
if ($vendo eq "$link") { # Se querystring igual a link então...
print " <a href='?$link' target='_self'>$aaa</a> ";
} else { # Caso contrário...
print " <a href='?$link' target='_self'>$aaa</a> ";
}
}
######################################
# Mostra a flexinha pra frente #
if ($todos >= $vendo) { # Se todos forem igual ou maior que querystring
$acima = $vendo + $porpagina; # Acima igual a querystring + 10
print " <a href='?pagina=$acima'>»</a>"; # Mostra setinha
} else {
}
######################################
Tutorial por Stone Rock.
Script por Gabriel, jgcl e CGIClube.