Sie sind auf Seite 1von 8

07/11/11

Um po co de PERL [A igo]

Um pouco de PERL
Autor: Rafael Lebro Martins <rafaellebrao at yahoo.com.br> Data: 25/09/2007 Introdu o Perl (Practical Extraction and Report Language) uma linguagem verstil e poderosa. Como o prprio criador Larr Wall disse: "Existe mais de uma maneira de fazer programao Perl". Algumas linguagens tornam algumas coisas mais fceis e outras extremamente difceis. Outras linguagens (geralmente de peso industrial) tornam tudo muito complicado. Com Perl, tarefas fceis so tornadas mais fceis ainda e, as difceis so simplificadas ao mximo. Voc no precisa dizer muito para a Perl fazer o que voc quer. uma linguagem para todos os gostos. Cito abaixo alguns motivos para se usar a Perl. Voc no precisa ser nenhum mago para compilar um programa em Perl; Os tipos e as estruturas usadas pela Perl so fceis de entender e usar; Strings e arrays podem crescer at o tamanho desejado pelo programador; Perl pega emprestado elementos de outras linguagens como (Python, C, BASIC, awk, ingls e grego); Perl gratuita; Voc pode incorporar Perl em outras linguagens e incorporar outras linguagens em Perl; Perl protege o programador contra erros de segurana acidentais, atravs de um mecanismo de rastreamento de dados que impede opera es perigosas antes que elas venham a acontecer.

Exemplos simples Vamos fazer um exemplo simples: 1 #!/usr/bin/perl 2 use strict; 3 use warnings; 4 print "Primeiro cdigo em Perl!!", "\n"; Fcil no foi?? A linha 1 se refere ao caminho para o interpretador do Perl. No Slackware o caminho /usr/bin/perl. Nas linhas 2 e 3 fao uso de dois mdulos pragmticos (strict e warnings). Os mdulos pragmticos afetam a fase de
. i aolin .com.b /a igo /imp e o a.php?codigo=7172 1/8

07/11/11

Um po co de PERL [A igo]

compilao e tambm podem alterar a fase de execuo do nosso programa. OBS: Por conveno, os nomes de pragmatas (mdulos pragmticos) so escritos com todas as letras min sculas. O pragma "strict" altera algumas regras bsicas sobre o que a aplicao considera como cdigo vlido. Com o "strict" podemos fazer restries em "subs", "vars" e "refs". Se nenhum destes for indicado, todas as trs restries sero assumidas. Como foi no nosso exemplo. use strict "vars"; # As variveis devem ser pr-declaradas. use strict "refs"; # O uso de referncias simblicas proibido. use strict "subs"; # Strings de barewords ( nome e/ou identificador descoberto). devem ser delimitadas. use strict; # Instala os trs stricts; O pragma "warnings" habilita os avisos emitidos pelo compilador e os do sistema de runtime.

Vari veis Uma varivel nada mais do que um lugar prtico para se guardar alguma coisa, com um nome para que se possa encontrar rapidamente o que se guardou. Podemos classificar as variveis pelo seu "escopo", ou seja, o alcance dessa varivel, de onde ela poder ser acessada. Dentro do escopo uma varivel pode ser "local" ou "global". Mais til que classificar uma varivel pelo seu escopo classific-la pelo tipo de dados que ela pode conter. Em se tratando de "tipo de dados" poderemos ter as variveis no singular (escalar) e no plural (array). Podemos declarar e imprimir uma varivel da seguinte maneira: $perl = "Practical Extraction and Report Language"; print $perl; Em Perl no precisamos predefinir o tipo de varivel. O "$" identifica a varivel como escalar. Assim como o "@" identifica a varivel como array. Smbolos que precedem alguns tipos de variveis: Varivel Escalar Array Hash Identificador Exemplo Uso $ @ % $singular Valor individual @lista Uma lista de valores %chave Um grupo chave/valor &sub Um trecho de cdigo que pode ser chamado execuo

Sub-rotina &

. i aolin

.com.b /a igo /imp e o a.php?codigo=7172

2/8

07/11/11

Um po co de PERL [A igo]

Escalares

Trabalhando com vari veis escalares


A composio da varivel escalar extremamente simples, o $ (identificador da varivel) seguido do nome. Uma varivel escalar pode receber qualquer forma de valor escalar (n meros de ponto flutuante, inteiros, strings, e at fazer referncia a uma outra varivel). Usando variveis escalares: Ex1: 1 #!/usr/bin/perl 2 use strict; 3 use warnings; 4 my $escalar = "valor escalar"; 5 my $escalar = 45; O operador "my" declara uma ou mais variveis privadas para existirem apenas dentro do bloco, sub-rotina, eval ou arquivo delimitador mais interno. Uma varivel introduzida com "my" s vlida no escopo em que foi definida. Ex2: 1 #!/usr/bin/perl 2 use strict; 3 use warnings; 4 print "Digite o nome dessa comunidade: "; 5 my $comunidade = <STDIN>; 6 chomp $comunidade; 7 print "O nome da comunidade $comunidade", "\n"; Neste exemplo podemos perceber algo diferente, o "<STDIN>" entrada padro. Neste caso, o valor da varivel "$comunidade" ser o texto digitado pelo usurio mais o caractere de nova linha "\n". A funo "chomp" apaga um caractere de nova linha final do trmino de uma string contida numa varivel. Suponhamos que o usurio digite "viva o linux" e tecle enter. O valor de "$comunidade" ser "viva o linux\n". Depois de utilizada a funo "chomp" esse valor passar a ser "viva o linux". Ex3: 1 #!/usr/bin/perl
. i aolin .com.b /a igo /imp e o a.php?codigo=7172 3/8

07/11/11

Um po co de PERL [A igo]

2 use strict; 3 use warnings; 4 my $escalar = "valor escalar"; 5 my $string = "$escalar"; Neste exemplo declaro o valor da varivel "$string" como sendo a varivel "$escalar". Portanto, se eu usar o print para imprimir o valor de "$string" a sada ser "valor escalar".

Arrays e algumas fun es

Trabalhando com arrays (listas)


Uma array um conjunto de dados, mantm diversos valores unidos de forma lgica. Alm dos arrays, Perl possui um outro tipo de varivel com m ltiplos valores, os hashes. Definio de arrays: uma lista de valores escalares ordenados. Assim como as escalares, os arrays tambm podem conter n meros, strings, ou ambos, alm de tambm poder fazer referncia a subarrays e subhashes. Os valores de um array so agrupados entre parnteses como abaixo: @dists = ("Slackware", "Debian", "Red Hat"); Podemos usar o "qw" para no ter que colocar todos os valores separados por "," deixando que ele faa isso por ns. Ex: @dists = qw("Slackware" "Debian" "Red Hat"); Para fazer referncia a algum elemento de um array usamos os subscritos. Os subscritos de array so delimitados por colchetes [subscrito] (sempre iniciado pelo valor "0" e um a menos que a posio do elemento dentro da lista). Ex: $dists[0] = "Slackware"; # Posio no array = 1 $dists[1] = "Debian"; # Posio no array = 2 $dists[2] = "Red Hat"; # Posio no array = 3 OBS: Cada elemento de uma lista um ESCALAR, por isso, ao fazer referncia a algum deles, usamos o smbolo "$" e no "@".
. i aolin .com.b /a igo /imp e o a.php?codigo=7172 4/8

07/11/11

Um po co de PERL [A igo]

Fun es para listas


As fun es so operadores que podem ser utilizadas para realizar tarefas variadas numa lista. Algumas delas so encontradas nos mdulos 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 } 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
. i aolin .com.b /a igo /imp e o a.php?codigo=7172 5/8

07/11/11

Um po co de PERL [A igo]

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 ($_) comear 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

ne t
O operador ne t descarta alguma ocorrncia na lista, como comentrios. Ele inicia a pr xima iterao do loop. Ex: foreach (<arquivo>) { next if $_ /^#/; }
. i aolin .com.b /a igo /imp e o a.php?codigo=7172 6/8

07/11/11

Um po co de PERL [A igo]

Descarta as linhas que iniciam com comentrios "#".

split
Busca em uma string por um separador e separa essa string em uma lista de substrings. Os separadores so 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 espao 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 funes que eu poderia tratar aqui, mas j estou um pouco cansado... :) Fica para uma prxima. * Vou deixar os HASHES para um prximo artigo.

Documenta o Para quem quiser mergulhar de cabea no mundo Pe l, h uma extensa documentao on-line e off-line, alm de diversos livros sobre o assunto. Segue abaixo alguns links que podem ser utilizados como material de consulta e aperfeioamento. http://www.perl.com http://perldoc.perl.org http://search.cpan.org/~hodel/Brasil-Checar-CPF-1.01a/Checar/CPF/CPF.pm

http://www.vivaolinux.com.br/artigo/Um-pouco-de-PERL Voltar para o site


. i aolin .com.b /a igo /imp e o a.php?codigo=7172 7/8

07/11/11

Um po co de PERL [A igo]

. i aolin

.com.b /a igo /imp e o a.php?codigo=7172

8/8

Das könnte Ihnen auch gefallen