Você está na página 1de 17

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

https://www.devmedia.com.br/programando-uma-intranet-com-apache-mysql-e-perl/16576 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

https://www.devmedia.com.br/programando-uma-intranet-com-apache-mysql-e-perl/16576 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 CPAN.org 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

https://www.devmedia.com.br/programando-uma-intranet-com-apache-mysql-e-perl/16576 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

https://www.devmedia.com.br/programando-uma-intranet-com-apache-mysql-e-perl/16576 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 "ambiente.pl" 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:

https://www.devmedia.com.br/programando-uma-intranet-com-apache-mysql-e-perl/16576 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

https://www.devmedia.com.br/programando-uma-intranet-com-apache-mysql-e-perl/16576 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

https://www.devmedia.com.br/programando-uma-intranet-com-apache-mysql-e-perl/16576 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

https://www.devmedia.com.br/programando-uma-intranet-com-apache-mysql-e-perl/16576 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 http://dev.mysql.com/.

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

https://www.devmedia.com.br/programando-uma-intranet-com-apache-mysql-e-perl/16576 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 .

https://www.devmedia.com.br/programando-uma-intranet-com-apache-mysql-e-perl/16576 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 http://search.cpan.org/.

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

https://www.devmedia.com.br/programando-uma-intranet-com-apache-mysql-e-perl/16576 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
artigo.pl 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 artigo.plDBI connect('vivaolinux:localhost','root',...)


2 failed: Can't connect to MySQL server on 'localhost' (10061)
3 at artigo.pl line 8
4 Não foi possível fazer conexão:
5 Can't connect to MySQL server on 'localhost' (10061) at artigo.pl

Criando Tabelas no Banco

https://www.devmedia.com.br/programando-uma-intranet-com-apache-mysql-e-perl/16576 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";
https://www.devmedia.com.br/programando-uma-intranet-com-apache-mysql-e-perl/16576 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

https://www.devmedia.com.br/programando-uma-intranet-com-apache-mysql-e-perl/16576 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


https://www.devmedia.com.br/programando-uma-intranet-com-apache-mysql-e-perl/16576 15/17
15/04/2021 Programando uma Intranet com Apache, MySQL e Perl
Por Ticursos.net
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
https://www.devmedia.com.br/programando-uma-intranet-com-apache-mysql-e-perl/16576 16/17
15/04/2021 Programando uma Intranet com Apache, MySQL e Perl

Assine agora

Hospedagem web por Porta 80 Web Hosting

https://www.devmedia.com.br/programando-uma-intranet-com-apache-mysql-e-perl/16576 17/17