Dkid Posted August 17, 2009 at 11:11 PM Report #283668 Posted August 17, 2009 at 11:11 PM 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
Baderous Posted August 18, 2009 at 01:57 PM Report #283722 Posted August 18, 2009 at 01:57 PM As linhas que não percebeste envolvem expressões regulares em Perl. http://blazonry.com/perl/regexp_exs.php http://www.comp.leeds.ac.uk/Perl/sandtr.html
falco Posted August 18, 2009 at 02:12 PM Report #283725 Posted August 18, 2009 at 02:12 PM 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
Dkid Posted August 18, 2009 at 03:40 PM Author Report #283730 Posted August 18, 2009 at 03:40 PM 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
falco Posted August 18, 2009 at 06:22 PM Report #283746 Posted August 18, 2009 at 06:22 PM 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...
Dkid Posted August 18, 2009 at 08:32 PM Author Report #283755 Posted August 18, 2009 at 08:32 PM 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
falco Posted August 19, 2009 at 09:36 AM Report #283789 Posted August 19, 2009 at 09:36 AM Exemplo de quê? Não percebi qual era a tua dúvida. Exemplos de sites em mod_perl? http://www.sapo.pt/ http://www.amazon.com/ http://my.opera.com/ e muitos outros...
Dkid Posted August 19, 2009 at 09:52 AM Author Report #283791 Posted August 19, 2009 at 09:52 AM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now