Jump to content

Recommended Posts

Posted

Boas,

Hoje em vez de ter estado a ler o livro, decidi fazer algo que já me andava aqui a roer. Que era páginas web com perl.

Para tal precisamos de:

CGI - Common Gateway Interface, que permite realizar páginas dinâmicas, ou seja permite o browser passar informação para o servidor web. Para mais informações : http://pt.wikipedia.org/wiki/CGI ou mais detalhadamente : http://en.wikipedia.org/wiki/Common_Gateway_Interface

Como o código precisa de ser interpretado (do lado do servidor), iremos necessitar de um servidor web:

- Apache (bastante utilizado e com bastante documentação)

- Lighttpd (dizem ser mais leve, e é o que estou a utilizar)

E por fim, para o servidor web necessitamos do mod_perl : http://perl.apache.org/ ou http://redmine.lighttpd.net/projects/1/wiki/ApplicationsUsingLighttpd

Após termos tudo bem instalado(se estiverem em ambiente linux, será mais fácil de seguirem os passos descritos, mas é apenas a minha opinião). Se estiverem a usar Windows, procurem pois não sei como vos ajudar.

Desloquem-se à vossa pasta, em linux normalmente é /var/www/, e criem um novo ficheiro com o editor de texto e escrevam:

#!/usr/bin/perl

print"Bom Dia!";

Guardem com a extensão .cgi (embora não estejamos a utilizar o cgi ainda)

Existem outras extensões como .pm que quer dizer "perl module", e deveria ser mais utilizado para programação orientada a objectos.

Neste caso vamos guardar como exemplo.cgi

Vão ao vosso browser e escrevam : http://localhost/exemplo.cgi

Se virem o resultado : Bom dia!, então está tudo a funcionar devidamente.

Podemos então passar para o próximo passo, vamos realizar um formulário onde o utilizador vai colocar o seu nome e o seu sobrenome.

#!/usr/bin/perl

print<<END;	# Depois desta linha podemos colocar todo o código HTML sem ter de o adaptar para ser compilado até chegar à palavra END (no final)
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<head>
<title>Bom dia!</title>
</head>
<h1>Bom dia!</h1>
<hr>
<FORM action="formulario.cgi" method="POST">
<table align="center" width="30%">
<tr>
<td>
Nome: <td><input type="text" name="nome"></td>
</td>
</tr>
<tr>
<td>
Sobrenome: <td><input type="text" name="sobrenome"></td>
</tr><tr align="right"><td></td><td>
<input type="submit" value="Enviar!">
</td><tr></table>
</FORM>

END
    local ($buffer, @pairs, $pair, $name, $value, %FORM); #também não entendi bem esta linha

    $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; 		#vai receber a informação do formulário
    if ($ENV{'REQUEST_METHOD'} eq "POST")  		# se o método de envio for POST
    {
        read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});	#vai ler a entrada, através do buffer
    }else {
$buffer = $ENV{'QUERY_STRING'};			#se for utilizado do método GET usa-se QUERY_STRING
    }
    # Split information into name/value pairs
    @pairs = split(/&/, $buffer);			#Separa a informação em pares de nome/valor
    foreach $pair (@pairs)				#para cada par
    {
($name, $value) = split(/=/, $pair);		#Separa-se os dois elementos pelo sinal de igual "="
$value =~ tr/+/ /;				#não entendi esta linha, mas entendi que se as retirar irá aparecer o simbolo + no lugar do campo nome ou sobrenome
#$value =~ s/%(..)/pack("C", hex($1))/eg;	#também não entendi esta
$FORM{$name} = $value;
    }
    $nome = $FORM{nome};				#É o nome do formulário
    $sobrenome  = $FORM{sobrenome};			#É o sobrenome do formulário

if ($nome eq '' && $sobrenome eq '')			#se ambos os campos estiverem por preencher envia uma mensagem
{print "Preencha os campos!\n";}
elsif ($nome eq '') 					#se o campo nome estiver vazio (a variavel vai estar vazia)
{print "Preencha o campo nome!\n";} 			#Envia uma mensagem para preencher o campo nome
elsif($sobrenome eq '')
{print "Preencha o campo sobrenome!\n";} 		#o mesmo que o campo nome

else{							#se estiverem ambos preenchidos envia o html
print "<html>";
print "<body>";
print "<h2>Hello $nome $sobrenome - Second CGI Program</h2>";
print "</body>";
print "</html>"; }

#fonte : http://www.tutorialspoint.com/perl/perl_cgi.htm
#	 http://www.jmarshall.com/easy/cgi/portuguese/
#	 http://www.cgi101.com/book/
# 	 http://www.tutorialspoint.com/perl/perl_cgi.htm

Como podem ver ainda existem coisas que nem mesmo eu entendo, mas a minha intenção é partilhar e aprender também.

Acabei depois por descobrir uma outra maneira de poupar linhas de código, com html já pré-feito

#!/usr/bin/perl -w

use strict;

use CGI qw(:standard);				# Vai permitir reduzir o codigo html, pois já vem com os standards do html e funções da CGI
use CGI::Carp qw(fatalsToBrowser);      	# Vai enviar as mensagens de erro para o browser

# Content-type, titulo da página, heading
print header(), start_html("Hello!"), h1("Bom dia!"), hr; #vai realizar o html por nós com charset utf-8

if (param())	{				# Se for verdade, então o formulário já foi preenchido

my $nome  = param("nome");   		# Extrai o valor que vem do formulário
print p("O seu nome é $nome"), p("O seu ip é $ENV{'REMOTE_ADDR'}");	# Mostra-nos o Nome inserido e o ip
}
else	{  					# Else, first time through so present form.
					# Se não existe preenchimento, então vamos mostrar o formulário

print start_form();			#inicia o formulário
print p("what is your name? ", textfield("nome")); #paragrafo, e campo de texto
print p(submit("Submeter"), reset("Limpar"));	   #paragrafo, botao submit, botao reset
print end_form();			#termina o formulário
}

print end_html;					#termina o html

#Com mais prática conseguimos poupar imensas linhas de código deixando assim o código mais limpo

#fonte: http://www.cgi101.com/learn/ch1/text.html
#	http://info.eps.surrey.ac.uk/FAQ/cgitutor/cgi3.html

Tentei fazer o meu melhor para documentar tudo o que entendi e sabia, as fontes consultadas estão em ambos os códigos, espero que vos sirva!

PS: Estive para colocar este tópico na secção de Web, mas como a linguagem Perl sempre foi debatida neste espaço, obtei por escrever aqui.

Cumprimentos e boas aprendizagens,

Dkid

I promise that I will not change the PATH variable again other than:PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Posted

Como o código precisa de ser interpretado (do lado do servidor), iremos necessitar de um servidor web:

- Apache (bastante utilizado e com bastante documentação)

- Lighttpd (dizem ser mais leve, e é o que estou a utilizar)

E por fim, para o servidor web necessitamos do mod_perl : http://perl.apache.org/ ou http://redmine.lighttpd.net/projects/1/wiki/ApplicationsUsingLighttpd

Estás a confundir coisas.

Para CGI, o Apache usa o mod_cgi. O mod_perl é um modelo diferente não é CGI, embora possas usar os módulos de Perl para CGI no mod_perl.

O mod_perl é bem mais moderno e eficiente e permite uma integração muito superior com o Apache.

http://en.wikipedia.org/wiki/Mod_perl

Posted

Baderous, obrigado pela informação já vou estudar isso!

Falco desconhecia o mod_cgi, pensei mesmo que era necessário o mod_perl, obrigado pela informação

I promise that I will not change the PATH variable again other than:PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Posted

Neste momento "ninguém" desenvolve em Perl para web com CGI, a não ser que não se use Apache, usa-se Apache + mod_perl...

Fiquei um pouco perdido agora, podes esclarecer-me com algum exemplo?

I promise that I will not change the PATH variable again other than:PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Posted

Cansaço!

Já entendi o que querias dizer, com o mod_perl o que acontece é que em vez de usar-mos CGI vamos utilizar apenas código em perl sem precisar de recorrer à CGI.

Realmente não me tinha apercebido embora já tivesse realizado um código em perl e tenha corrido no servidor web.

Isto ajudou-me a entender o que querias dizer http://www.perl.com/pub/a/2002/02/26/whatismodperl.html

I promise that I will not change the PATH variable again other than:PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.