Beruflich Dokumente
Kultur Dokumente
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
2/8
07/11/11
Um po co de PERL [A igo]
Escalares
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".
07/11/11
Um po co de PERL [A igo]
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]
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
07/11/11
Um po co de PERL [A igo]
. i aolin
8/8