Dando continuidade à tentativa de fazer algo web com Perl, acho que o próximo passo pode ser receber parâmetros vindos de um formulário ou url.
O primeiro script de teste ficou assim:
use strict;
use warnings;
my $r = shift;
$r->content_type('text/html');
print '<h1>Funcionou!</h1>';
O script é executado pelo modperl como se fosse uma função e recebe como parâmetro um objeto do tipo Apache2::RequestRec. Quando fazemos o shift, este parâmetro passa para a variável local $r.
Para ter acesso aos dados submetidos por GET ou POST de forma legível, precisamos instanciar um objeto Apache2::Request, que recebe no construtor o RequestRec da requisição atual:
use strict;
use warnings;
use Apache2::Request;
my $r = shift;
my $req = Apache2::Request->new($r);
$r->content_type('text/html');
print '<h1>Funcionou!</h1>';
Os parâmetros passados, tanto por GET quanto por POST, estão disponíveis pelo accessor param:
use strict;
use warnings;
use Apache2::Request;
my $r = shift;
my $req = Apache2::Request->new($r);
$r->content_type('text/html');
print '<h1>Funcionou!</h1>';
print $req->param('variavel_por_get');
print $req->param('variavel_por_post');
Caso o nome da variável não seja passado para o accessor, ele retorna um array que pode ser iterado, como neste caso:
use strict;
use warnings;
use Apache2::Request;
my $r = shift;
my $req = Apache2::Request->new($r);
$r->content_type('text/html');
foreach my $param ( $req->param ) {
print "$param: ", $req->param($param), "<br />";
}
Além do accessor param, os dados do POST também estão no accessor body. Para acessar uma variável exclusivamente submetida por POST fica assim:
use strict;
use warnings;
use Apache2::Request;
my $r = shift;
my $req = Apache2::Request->new($r);
$r->content_type('text/html');
print '<h1>Funcionou!</h1>';
print $req->body('somente_variavel_por_post');
Assim como no param, também é possível ter um array com o nome dos parâmetros passados por POST ao acessar o body sem nenhum argumento.
E é isso.
Referências:
Dezembro 16, 2008 às 8:01 pm |
Tive uma pequena dificuldade na hora de implementar as dicas deste post, pois foi necessário instalar uma nova biblioteca do CPAN e habilitar o módulo no Apache.
Seguem os comando que tive que realizar para trabalhar como variáveis proveniente de formulários:
$ sudo apt-get install libapache2-request-perl
$ sudo apt-get install libapreq2
Verifique se o módulo esta habilitado:
$ cd /etc/apache2/mods-enabled
$ ls | grep apreq.load
Se o arquivo existir ótimo, não precisa fazer nada, caso contrário habilite o módulo com o comando abaixo.
$ sudo ln -s ../mods-available/apreq.load apreq.load
Comigo funcionou.
Dezembro 16, 2008 às 8:04 pm |
Outra forma de habilitar o módulo no Apache é com sudo a2enmod apreq.
Esse nome esquisito vem de apache2 enable module.
Pra desabilitar é a2dismod.