15/04/2021 Programando uma Intranet com Apache, MySQL e Perl
Artigo
Invista em você! Saiba como a DevMedia pode ajudar sua
carreira.
Programando uma Intranet com
Apache, MySQL e Perl
Entre as funcionalidades do Perl está a capacidade de criar e gerenciar aplicativos Web. Para isto
temos o CGI, DBI, o Catalyst entre outros que facilitam a vida do programador. Além de dezenas de
milhares de módulos
Marcar como concluído Anotar
Artigos
HTML e CSS
Programando uma Intranet com Apache, MySQL e Perl
Chega uma hora na vida que nossos programas Perl têm que sair da mera linha de
comando. Não que haja problemas com a linha de comando. Mas algumas pessoas
acabam não gostando muito dela. Seja por que a considerem feia, pouco amigável,
entediante ou seja lá o que for.
2
[Link] 1/17
15/04/2021 Programando uma Intranet com Apache, MySQL e Perl
Um dia seu chefe virá para você e dirá: "Eu queria que estas aplicações que você
fez para obter informações dos servidores quem disponíveis para o pessoal do
atendimento nível 1". E você retruca: "Elas estão!".
O chefe termina: "O pessoal do nível 1 não está familiarizado com linha de
comando! Quero uma coisa grá ca, fácil de usar e acessível de qualquer
computador da empresa!".
Você poderia responder: "Coisa grá ca? Pede para equipe do Windows. Eles
adoram grá cos, janelinhas, campainhas e coisas inúteis...". Mas você não quer
dar esse gostinho para eles... o gostinho de pegarem seus programas em linha de
comando, colocarem em uma caixinha colorida e levar toda a fama...
Então pensamos: "Vamos criar algo do tipo cliente/servidor? Banco de dados?
Aplicativo local? Web?". O pessoal do Linux convoca um Brain Storm (no barzinho
do Zé) para discutir o assunto. E surgem as ideias: Qt, PHP, MySQL, Postgree,
Apache, shell script, Java, C...
Parece que teremos um programa monstro, daqueles que usam diversas
linguagens de programação diferentes. PHP para a interface Web, shell script e C
para realizar as tarefas de administração dos servidores... Sugeriram até um
pouco de Java. Não haverá escapatória? Iríamos criar um monstrengo???
Aí alguém da sua equipe bate na mesa. As cervejas balançam. Caem algumas gotas
sobre a mesa. E a salvação aparece: "Por que a gente não faz tudo em Perl?
Podemos criar os módulos de gerência dos servidores, a interface Web e de
quebra ainda podemos fazer os módulos do Apache. Não vamos gastar um dólar
com licença de so ware e não precisamos instalar nada novo nos servidores
Linux."
Do que eu vou falar aqui?
2
[Link] 2/17
15/04/2021 Programando uma Intranet com Apache, MySQL e Perl
Entre as funcionalidades do Perl está a capacidade de criar e gerenciar aplicativos
Web. Para isto temos o CGI, DBI, o Catalyst entre outros que facilitam a vida do
programador. Além de dezenas de milhares de módulos no [Link] que estão lá
para nos ajudar.
Este artigo vai apresentar uma introdução aos aplicativos CGI com Apache, Perl e
MySQL. Independentemente de sua implementação em servidores Linux ou
Windows. O Perl é isto: Liberdade de escolha. Inclusive pode-se usar Perl no IIS*.
Mas isso é humilhar demais os programadores ASP.
Nota: se quiser saber como fazer o IIS executar Perl acesse a página do ActivePerl
Bom, obviamente você vai precisar de um sistema com Perl, MySQL e Apache
instalados. Por enquanto estou usando as con gurações padrão da instalação. Na
minha instalação do Debian GNU/Linux, novinha aliás, não foi necessário fazer
nenhuma modi cação nas con gurações padrão do Apache, Perl ou MySQL.
Mas como o Apache é um pouco diferente e o Apache do meu Debian é diferente
do Apache onde eu trabalho que está num Red Hat, ca a dica para veri car as
opções de con guração abaixo que devem estar habilitadas:
1 LoadModule cgi_module modules/mod_cgi.so
2 ScriptAlias /cgi-bin/ "<PATH da sua pasta CGI>"
Quanto ao MySQL você pode usar a linha de comando o MyAdmin, o
QueryBrowser. Fique à vontade sobre como gerenciar e criar seus bancos. A
versão que usaremos é a: 5.0.51a:
2
[Link] 3/17
15/04/2021 Programando uma Intranet com Apache, MySQL e Perl
O Perl pode ser o ActiveState, Strawberry* ou aquele original da sua instalação.
Apenas veri que se ele está atualizado. Qualquer versão acima da 5.6 está ótimo. É
só digitar:
$ perl -v
E veri car a versão:
Nota: O Strawberry é uma distribuição do Perl para Windows. Assim como o MySQL e o
Apache funcionam no Windows. Tudo que zermos aqui funcionará corretamente no
Windows desde que devidamente con gurados. Se tiver necessidade de usar no Windows -
shame on you - você deve alterar o she-bang dos scripts para:
2
[Link] 4/17
15/04/2021 Programando uma Intranet com Apache, MySQL e Perl
1 #!c:\<PATH DA SUA INSTALAÇÃO DO PERL>\perl
Agora que está tudo veri cado, VAMOS PARA A AÇÃO!
Criando a primeira página Web com Perl
Abra o seu editor de textos e digite o código abaixo. Salve como "[Link]" no
diretório que está de nido no item ScriptAlias do arquivo de con guração do seu
Apache. Normalmente é uma pasta com o nome cgi-bin . No meu caso ca em
/usr/lib/cgi-bin .
1 #!/usr/bin/perl
2 use warnings;
3 use strict;
4 use CGI; #Carrega o módulo CGI, que permite criarmos scripts cgi -
5 my $cgi = CGI->new; #Criamos uma instância da classe CGI
6 print $cgi->header, # Primeiro criamos o Cabeçalho
7 $cgi->start_html('Minha Primeira Página Perl'), # Iniciamos o Ar
8 $cgi->h1('BEM VINDO AO PERL'), # Cria a Tag <h1>TEXTO</h1>
9 $cgi->p(scalar localtime), # Cria <p>Texto</p>
10 $cgi->h3("Minhas Variáveis Locais:\n");
11 foreach my $chave (keys(%ENV)) {
12 print $cgi->p($chave . " => $ENV{$chave}");
13 }
14 print $cgi->end_html; # Finalizamos o HTM
E veja o resultado no seu browser:
[Link] 5/17
15/04/2021 Programando uma Intranet com Apache, MySQL e Perl
O nosso script primeiro cumprimenta o usuário, mostra a hora atual e apresenta
as variáveis de ambiente. Bacana mas, antes de continuar vamos falar um pouco
sobre o módulo CGI do Perl.
O módulo CGI é uma solução Perl completa e bem madura que pode receber e
criar requisições HTTP. É uma solução com mais de dez anos de desenvolvimento
e burilamento. Comecei está série de artigos com ela por que já está entre os
principais e mais consagrados módulos do Perl.
Com ele podemos criar tags HTML em um estilo de programação orientado a
objetos.
1 $meuObjetoCGI = CGI->new;
2 $meuObjetoCGI->tagHTML([parâmetros]);
A primeira vantagem desta forma de escrever códigos é a organização. O código é
mais enxuto e legível que o HTML/XHTML tradicional. A outra vantagem é a
2
[Link] 6/17
15/04/2021 Programando uma Intranet com Apache, MySQL e Perl
possibilidade de criar páginas com estrutura dinâmica com pouco esforço. Mas a
maior vantagem é poder levar o poder do Perl para suas aplicações Web.
Para ver uma característica prática, execute o script na linha de comando e veja a
saída:
Perceba que na primeira linha invocamos strict e warning. Sempre use 'strict' e
'warning' em seus scripts Perl. Irá salvar muito tempo de trabalho com depuração.
Depois nós carregamos o módulo CGI e criamos uma instância do mesmo:
1 $my $cgi = CGI->new
[Link] 7/17
15/04/2021 Programando uma Intranet com Apache, MySQL e Perl
Utilizar o modo de orientação a objetos é uma boa prática, pois aplicações Web
complexas exigem diversos módulos, e car usando alguns como objetos e outros
como funções carregadas tornará seu código uma bagunça.
No trecho:
1 print $cgi->header,
2 $cgi->start_html('Minha Primeira Página Perl'),
3 $cgi->h1('BEM VINDO AO PERL'),
4 $cgi->p(scalar localtime),
5 $cgi->h3("Minhas Variáveis Locais:\n");
Estamos criando o cabeçalho HTML e criamos o corpo da página. A função
'localtime' retorna um array com o horário local, ou um string quando o contexto
é escalar. A função scalar obriga a função localtime a retornar um escalar.
No penúltimo bloco de código:
1 foreach my $chave (keys(%ENV)) {
2 print $cgi->p($chave . " => $ENV{$chave}");
3 }
Um hash é um tipo de variável do Perl que armazena valores relacionados a uma
chave.
O hash %ENV é uma variável interna do Perl e carrega as variáveis de ambiente no
formato: %ENV = {Variável => valor_da_variável} . A função keys retorna um array
com todas as chaves do hash. Então, no nosso caso, retornará o nome de todas as
2
[Link] 8/17
15/04/2021 Programando uma Intranet com Apache, MySQL e Perl
variáveis de ambiente. E para cada uma delas - foreach - ele mostrará no
documento HTML o nome_da_variável => valor_va_variável .
E encerramos com:
1 print $cgi->end_html;
Moral da história
Fizemos aqui uma pequena apresentação dos scripts CGI com Perl. O módulo CGI
permite que você crie documentos com qualquer tag HTML, processe formulários
e crie páginas dinâmicas.
Apresentamos, para os que não são familiarizados com esta linguagem, o loop
foreach, que executa uma repetição para cada item de um dado array. O conceito
de hash - que pode ser entendido como um array associativo por nome ao invés de
ordenado por número de posição. Pode ser comparado com o tipo dicionário de
outras linguagens. Porém o intuito aqui não é apresentar ao Perl mas suas
funcionalidades de programação Web.
Agora vamos falar um pouco sobre o MySQL com o Perl e o DBI. O MySQL é um
dos Bancos de Dados Relacionais mais utilizados no mundo. Mas, para alguém que
acessa este site isto é uma informação redundante. Apesar de ser impossível não
elogiar o MySQL vamos passar direto para a comunicação do MySQL com o Perl.
Caso tenha interesse em mais detalhes sobre o MySQL acesse [Link]
Para acessar o MySQL com Perl é necessário que você instale alguns módulos do
CPAN. Estes módulos vão administrar a conversa entre o seu programa e o banco
de dados. No nosso caso, eu recomendo o Perl DBI. Para isso digite na sua console
os comandos a seguir: 2
[Link] 9/17
15/04/2021 Programando uma Intranet com Apache, MySQL e Perl
1 $cpan intall DBI
E deixe a instalação rolar. Caso o cpan solicite alguma informação responda
conforme a instalação no seu sistema. Em dúvida, deixe um poste aqui e eu
responderei. No meu caso o DBI já estava instalado:
1 $ cpan install DBI
2 CPAN: CPAN::SQLite loaded ok (v0.199)
3 Database was generated on Sun, 16 May 2010 20:31:26 GMT
4 CPAN: Module::CoreList loaded ok (v2.31) DBI is up to date (1.611)
Uma vez que o módulo DBI está instalado temos que nos certi car que temos os
drivers necessários. No CPAN temos drivers para diversos bancos de dados, sendo
possível utilizar bancos MySQL, MS-SQL, Oracle entre outros. Para veri carmos
os drivers possíveis digite:
1 $perl -MDBI -e '@drivers = DBI->available_drivers; print qw/@drive
2 $ perl -MDBI -e '@drivers = DBI->available_drivers; print qq/@driv
3 ADO DBM ExampleP File Gofer ODBC Pg Proxy SQLite Sponge mysql
No nosso caso o driver do MySQL aparece como último da nossa lista, então ele
está instalado. Porém, caso não apareça o driver do MySQL na sua instalação,
utilize o comando $cpan install DBD::mysql .
[Link] 10/17
15/04/2021 Programando uma Intranet com Apache, MySQL e Perl
1 $ cpan install DBD::mysql
2 CPAN: CPAN::SQLite loaded ok (v0.199)
3 Database was generated on Sun, 16 May 2010 20:31:26 GMT
4 CPAN: Module::CoreList loaded ok (v2.31)
5 DBD::mysql is up to date (4.014).
Rode novamente o comando para veri car os drivers de banco de dados do DBI e
certi que-se de que você tem o driver correto. Para instalar o driver de outro
banco de dados, veri que o driver em [Link]
Conectando-se com o banco de dados
Vamos criar um banco qualquer. No caso eu criei o banco vivaoLinux no console
do MySQL.
1 CREATE DATABASE `vivaoLinux` ;
$dbh será nossa variável de manuseio do banco, ou seja, o database handle. Para
criar um database handle a sintaxe é a seguinte:
1 my $dbh = DBI->connect(“DBI:<nome_do_driver>:<nome_do_banco>:<serv
O módulo DBI também fornece a variável DBI::errstr que armazena possíveis
mensagens de erros. Muito útil para debugar erros. Então, vamos criar um
programa para acessar o banco 'vivaoLinux' com o Perl. Para acessar
2 um banco
[Link] 11/17
15/04/2021 Programando uma Intranet com Apache, MySQL e Perl
temos que criar o database handle. Para isso crie um arquivo, no meu caso
[Link] e digite o código abaixo:
1 use strict;use warnings;
2 use DBI;
3 my $dbh = DBI->connect("DBI:mysql:vivaolinux:localhost", 'root','r
4 or die ("Não foi possível fazer conexão: " . $DBI::errstr);
5 $dbh->disconnect();
A primeira observação clara é: você nunca irá usar o usuário root num programa
que acessa um banco em produção. Pois é uma falha séria de segurança. O usuário
declarado na string de conexão do programa deve ter as con gurações se acesso
no sistema do banco de dados restritas às operações necessárias. Então, o root
não é necessário. Isso é importante, pois caso o banco esteja inacessível a strig de
erro pode mostrar ao usuário do programa as informações da conta de acesso ao
banco. Veja abaixo o erro que aparece se eu executar o programa acima com o
serviço do MySQL parado:
1 $perl [Link] connect('vivaolinux:localhost','root',...)
2 failed: Can't connect to MySQL server on 'localhost' (10061)
3 at [Link] line 8
4 Não foi possível fazer conexão:
5 Can't connect to MySQL server on 'localhost' (10061) at [Link]
Criando Tabelas no Banco
[Link] 12/17
15/04/2021 Programando uma Intranet com Apache, MySQL e Perl
Para criar tabelas no banco com o Perl DBI, criamos uma string com o valor do
código SQL que queremos adicionar, então, usamos o método 'do' pertencente ao
nosso objeto $dbh , como o código abaixo:
1 #!/usr/bin/perluse strict;
2 use warnings;
3 use DBI;
4 my $dbh = DBI->connect("DBI:mysql:vivaolinux:localhost", 'root',''
5 or die ("Não foi possível fazer conexão: " . $DBI::errstr);
6 my $sql = qq{CREATE TABLE itens (id INT NOT NULL,Item VARCHAR(255)
7 Descr VARCHAR(255),Preco REAL,Vid INT NOT NULL)};
8 my $return = $dbh->do($sql);
9 if($return) {print "Table addition successful!\n";}else {
10 print "\n\nERROR! $DBI::errstr\n";}
11 $dbh->disconnect();
12 saída:
13 Table addition successful!
Veja que o procedimento foi extremamente simples. E a vantagem que temos
de nindo a query SQL em uma string $sql é a versatilidade do Perl. A string pode
ser gerada dinamicamente no código conforme nossa necessidade e algoritmo.
Para alterarmos o valor uma tabela basta modi car a variável $sql :
1 my $sql = "ALTER TABLE itens ADD Qta VARCHAR(20)";
e para remover uma tabela completa:
2
1 my $sql = "DROP TABLE itens";
[Link] 13/17
15/04/2021 Programando uma Intranet com Apache, MySQL e Perl
Enviando dados para uma tabela
Para enviar dados para uma tabela, temos que executar o método 'prepare' do DBI
antes do 'execute', como você vê abaixo:
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4 use DBI;
5 my $dbh = DBI->connect("DBI:mysql:vivaolinux:localhost", 'root',''
6 or die ("Não foi possível fazer conexão: " . $DBI::errstr);
7 my $sql = "INSERT INTO itens (id,Item,Descr,Preco,Vid,Qta) " .
8 "VALUES ('01','Curso Perl','Curso Perl do Basico ao Profissional',
9 "'90.00','10','20')";
10 my $query = $dbh->prepare($sql);$query->execute
11 or die("\nErro executando query! $DBI::errstr");
12 print "Query $sql executada com sucesso.";
13 $dbh->disconnect();
14 saída:
15 Query INSERT INTO itens (id,Item,Descr,Preco,Vid,Qta)
16 VALUES ('01','Curso Perl','Curso Perl do Basico ao Profissional',
17 '90.00','10','20') executada com sucesso.
O Perl, como uma das mais poderosas linguagens de programação da atualidade
unido com o módulo DBI apresenta uma interface de programação muitíssimo
poderosa e prática para o uso com MySQL, permitindo a criação de aplicações
sólidas com pouco esforço.
Tecnologias:
2
[Link] 14/17
15/04/2021 Programando uma Intranet com Apache, MySQL e Perl
Apache MySQL Perl SQL
Marcar como concluído Anotar
Inicie agora sua carreira de
programador por apenas
R$49,90/mês
Ainda está em dúvida? Experimente a plataforma grátis durante 7 dias.
Faça um teste grátis
BENEFÍCIOS
Suporte em tempo real
Certi cado de autoridade
Exercícios para praticar
Estudo gami cado
Planos de estudo para
cada carreira de
programador
Saiba mais
Por Ticursos net
[Link] 15/17
15/04/2021 Programando uma Intranet com Apache, MySQL e Perl
Por [Link]
Em 2010
RECEBA NOSSAS NOVIDADES
Informe o seu e-mail
Receber Newsletter
Suporte ao aluno - Tire a sua dúvida.
Tecnologias
Exercicios
Cursos
Artigos
Revistas
Fale conosco
Trabalhe conosco
2
Assinatura para empresas
[Link] 16/17
15/04/2021 Programando uma Intranet com Apache, MySQL e Perl
Assine agora
Hospedagem web por Porta 80 Web Hosting
[Link] 17/17