Crea un control <input> de tipo hidden, llamado, por ejemplo, 'pagina'.
En el código, después de hacer la consulta, según el número de resultados, deberás crear código HTML según quieras que aparezcan los controles de cambio de página, o no.
En caso de que tengan que aparecer, los controles deberán modificar el valor de 'pagina' para la siguiente pulsación que haga el usuario, sobre ellos.
Así, si has leído el valor de 'pagina' al principio del programa, y la has almacenado en una variable llamada $pagina, entonces deberás indicar la nueva URL de esos controles, con los valores $pagina+1 o $pagina-1, para que el usuario pueda avanzar o retroceder. Naturalmente, el control de avance de página no debe aparecer si ya está en la última página. Y el de retroceder, si está en la primera.
Como la petición la haces por medio del método GET, te vale con construir la URL, de forma parecida a esta:
$pag_antes = $pagina - 1;
$pag_desp = $pagina + 1;
$control_antes = qq(<a href="http://bonusqr.com/cgi-bin/ofertas.cgi?pagina=$pag_antes&..."> < </a>);
Naturalmente, en la URL también deberás indicar el resto de parámetros del resto del formulario (en lo indicado antes como '...'). Es como si el usuario ingresara directamente en la página, por lo que hay que construir un URL completo.
Queda una cosa: debes modificar la consulta para que tenga en cuenta el valor de $pagina, a la hora de mostrar los resultados.
Consejos:
- usa el módulo CGI, pues te ahorrará muchísimo código. Y un sistema de plantillas para no tener que mezclar código Perl y HTML
- usar sysread() no hará que tu código sea más rápido o seguro
- si el número de accesos es muy grande, acceder a archivos en modo texto puede convertirse en un cuello de botella. Es mejor usar una base de datos "de verdad"
- si haces un lock, como parece que es lo que hace ReadLock, dejas bloqueado el acceso al archivo, por lo que otro usuario puede encontrarse con la base de datos cerrada. Si los accesos son de solo lectura, no necesitas bloquear nada (bueno, excepto en Windows, que va a su bola)
- hay módulos en CPAN para realizar esta operación de paginado, como por ejemplo HTML::Paginator, Data::SimplePaginator, Data::Pageset, Data::SpreadPagination, Data::Page, CGI::Pager, o el increíble File::Tabular::Web, que convierte, directamente, un archivo de texto con datos en columnas, en una aplicación web