Programando Uma Intranet Com Apache, MySQL e Perl
Programando Uma Intranet Com Apache, MySQL e Perl
Artigo
Artigos
HTML e CSS
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...
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."
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
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.
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
$ perl -v
Nota: O Strawberry é uma distribuição do Perl para Windows. Assim como o MySQL e o
Windows desde que devidamente con gurados. Se tiver necessidade de usar no Windows -
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
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
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 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.
1 $meuObjetoCGI = CGI->new;
2 $meuObjetoCGI->tagHTML([parâmetros]);
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:
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");
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
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
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:
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
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/.
$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
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:
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:
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!
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
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.
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
BENEFÍCIOS
Saiba mais
Receber Newsletter
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
https://www.devmedia.com.br/programando-uma-intranet-com-apache-mysql-e-perl/16576 17/17