Pular para o conteúdo

Um pouco de PERL

Neste artigo tento compartilhar com vocês um pouco do que aprendi da linguagem PERL (Practical Extraction and Report Language). A Perl é uma linguagem sem burocracia, para todos os gostos. Tem uma enorme flexibilidade e poder de operação. Espero que o material possa contribuir com o enriquecimento da comunidade. Para aqueles que ainda não conhecem essa linguagem, fica o convite para a leitura...
Rafael Lebrão Martins Rafael Martins
Hits: 43.602 Categoria: Perl Subcategoria: Introdução
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Parte 5: Arrays e algumas funções

Trabalhando com arrays (listas)

Uma array é um conjunto de dados, mantém diversos valores unidos de forma lógica. Além dos arrays, Perl possui um outro tipo de variável com múltiplos valores, os hashes.

Definição de arrays: uma lista de valores escalares ordenados. Assim como as escalares, os arrays também podem conter números, strings, ou ambos, além de também poder fazer referência a subarrays e subhashes.

Os valores de um array são agrupados entre parênteses como abaixo:

@dists = ("Slackware", "Debian", "Red Hat");

Podemos usar o "qw" para não ter que colocar todos os valores separados por "," deixando que ele faça isso por nós.

Ex:

@dists = qw("Slackware" "Debian" "Red Hat");

Para fazer referência a algum elemento de um array usamos os subscritos. Os subscritos de array são delimitados por colchetes [subscrito] (sempre iniciado pelo valor "0" e um a menos que a posição do elemento dentro da lista).

Ex:

$dists[0] = "Slackware"; # Posição no array = 1
$dists[1] = "Debian"; # Posição no array = 2
$dists[2] = "Red Hat"; # Posição no array = 3

OBS: Cada elemento de uma lista é um ESCALAR, por isso, ao fazer referência a algum deles, usamos o símbolo "$" e não "@".

Funções para listas

As funções são operadores que podem ser utilizadas para realizar tarefas variadas numa lista. Algumas delas são encontradas nos módulos do Perl. Vou falar um pouco sobre algumas funções que considero importantes para modificar listas.

chomp

Remove o caractere de nova linha final.

Ex:

1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4 my $passwd = "/etc/passwd";
5 open (PASSWD, $passwd);
6 my @users = <PASSWD>;
7 close (PASSWD);
8 foreach (@users) {
9 chomp;
10 print $_;
11 }
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Remove todo caractere "\n" (nova linha) no final de cada linha do arquivo "passwd" e imprime o arquivo sem o "\n". Como abaixo:

$ perl chomp.pl
root:x:0:0:,,,: /root: /bin/bashbin:x:1:1:bin: /bin:daemon:x:2:2:daemon: /sbin:adm:x:3:4:adm: /var/log:lp:x:4:7:lp: /var/spool/lpd:sync:x:5:0:sync: /sbin: /bin/syncshutdown:x:6:0:shutdown: /sbin: /sbin/shutdownhalt:x:7:0:halt: /sbin: /sbin/haltmail:x:8:12:mail: /:news:x:9:13:news: /usr/lib/news:uucp:x:10:14:uucp: /var/spool/uucppublic:operator:x:11:0:operator: /root: /bin/bashgames:x:12:100:games: /usr/games:ftp:x:14:50:: /home/ftp:smmsp:x:25:25:smmsp: /var/spool/clientmqueue:mysql:x:27:27:MySQL: /var/lib/mysql: /bin/bashrpc:x:32:32:RPC portmap user: /: /bin/falsesshd:x:33:33:sshd: /:gdm:x:42:42:GDM: /var/state/gdm: /bin/bashpop:x:90:90:POP: /:nobody:x:99:99:nobody: /:suporte:x:1001:100:,,,: /home/suporte: /bin/bashalias:x:1005:103:: /var/qmail/alias:qmaild:x:1006:103:: /var/qmail:qmaill:x:1007:103:: /var/qmail:qmailp:x:1008:103:: /var/qmail:qmailq:x:1009:104:: /var/qmail:qmailr:x:1010:104:: /var/qmail:qmails:x:1011:104:: /var/qmail:vpopmail:x:89:89:: /var/vpopmail:clamav:x:1012:105:: /home/clamav: /sbin/nologinsamba:x:1013:100:,,,: /home/samba: /bin/basharlen:x:1014:100:,,,: /home/arlen: /bin/bashclientes:x:1015:100:,,,: /home/clientes: /bin/bashrafael:x:1016:106:,,,: /home/rafael: /bin/bashdesenvolvimento:x:1017:106:,,,: /home/desenvolvimento: /bin/bashprosoft:x:1018:100:,,,: /home/prosoft: /bin/bashpostgres:x:1019:107:: /home/postgres:snort:x:70:70:,,,: /home/snort: /bin/falsealan:x:1020:100:,,,: /home/alan: /bin/bashtux:x:1021:100:,,,: /home/tux: /bin/bashmarcelo:x:1022:1

last

Termina imediatamente o loop.

Ex:

1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4 my $passwd = "/etc/passwd";
5 open (PASSWD, $passwd);
6 my @users = <PASSWD>;
7 close (PASSWD);
8 foreach (@users) {
9 last if $_ =~ /^mail/;
10 print $_;
11 }

Neste caso, quando alguma linha ($_) começar com a palavra "mail", o last irá terminar o loop e imprimir na tela apenas as linhas anteriores a ela. Como abaixo:

$ perl chomp.pl
root:x:0:0:,,,:/root:/bin/bash
bin:x:1:1:bin:/bin:
daemon:x:2:2:daemon:/sbin:
adm:x:3:4:adm:/var/log:
lp:x:4:7:lp:/var/spool/lpd:
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

next

O operador next descarta alguma ocorrência na lista, como comentários. Ele inicia a próxima iteração do loop.

Ex:

foreach (<arquivo>) {
next if $_ /^#/;
}

Descarta as linhas que iniciam com comentários "#".

split

Busca em uma string por um separador e separa essa string em uma lista de substrings. Os separadores são determinados usando Regex como no exemplo abaixo:

Ex:

1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4 print "Digite uma lista de nomes separada por espaço e tecle enter: ";
5 my $nomes = <STDIN>;
6 chomp $nomes;
7 my @lista = split (/ /, "$nomes");

Transformei a escalar "$nomes" numa array "@lista"!

Há inúmeras funções que eu poderia tratar aqui, mas já estou um pouco cansado... :) Fica para uma próxima.

* Vou deixar os HASHES para um próximo artigo.

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   1. Introdução
   2. Exemplos simples
   3. Variáveis
   4. Escalares
   5. Arrays e algumas funções
   6. Documentação

Matriz <-> Filial com o OpenVPN

Capital Intelectual

Firewall seguro com o IPTables

Comparação entre Tcl e Perl

Programando em Perl (parte 2)

Módulos CPAN no Debian e distros GNU/Linux em geral

Programando em Perl (parte 1)

Enviando notificações do Nagios para o MSN

#1 Comentário enviado por cguerra em 25/09/2007 - 11:07h
Muito bom o artigo, porém poderia explicar, ou até mesmo exemplicaficar melhor as variaveis...

no caso, usou mais string do que tudo no mundo, e não usamos só string no nosso dia-a-dia, mas mesmo assim está muito bom este artigo, com uma linguagem bem sintetisada e fácil.

abraços.
#3 Comentário enviado por f_Candido em 25/09/2007 - 19:39h
Show de Bola. Nunca tinha reparado sobre o PERL, agora vai ser bem útil.
Abraços
#4 Comentário enviado por fabio em 26/09/2007 - 05:37h
Tenho um carinho especial pelo Perl, além de ter sido minha primeira linguagem de programação no Linux, é uma ferramente muito poderosa pra criação de rotinas de manutenção de servidores. Seu suporte a expressões regulares é único!

Ótimo artigo.
#5 Comentário enviado por rafael martins em 26/09/2007 - 06:56h
Obrigado a todos pelos comentários. Com relação ao "suporte a expressões regulares", Fábio, é único mesmo. O Perl interage com as RE's maravilhosamente bem. Utilizo bastante o Perl em conjunto com RE para a manutenção do Firewall (iptables), proxy, controle de banda, só para citar alguns! Vou escrever um próximo artigo sobre Regex para postar na Comunidade. Um abraço a todos.
#6 Comentário enviado por galmeida07 em 26/09/2007 - 08:14h
Existe alguma documentação específica para iniciantes em Perl? Otimo artigo, sempre quis aprender, mas nunca achava nada 'introdutorio'. O brigado e parabéns!
#7 Comentário enviado por rafael martins em 26/09/2007 - 12:49h
Dê uma olhada neste link. Há bons materiais de introdução ao Perl, traduzidos para o Português.

http://www.perl.org.br/bin/view/Perldoc/WebHome

Se você não tiver dificuldades com a Língua Inglesa, veja o link abaixo também.

http://perldoc.perl.org/

O livro da Deitel, "Perl Como Programar" é excelente para quem está iniciando com Perl.. Se você quiser mesmo aprender a linguagem, invista um pouquinho num livro como este..
Um abraço.
#8 Comentário enviado por eskenT em 27/12/2007 - 00:26h
Cara, muito bom o conteudo.
sobre a documentação, o unico problema é que são todos em inglês.
mas também estou dificultando as coisas, programação sem saber inglês não é programação.
#9 Comentário enviado por marcosmiras em 22/01/2008 - 16:44h
Legal... muito bom...

Contribuir com comentário

Entre na sua conta para comentar.