• Nenhum resultado encontrado

Introdu¸c˜ao `a linguagem Perl

N/A
N/A
Protected

Academic year: 2022

Share "Introdu¸c˜ao `a linguagem Perl"

Copied!
39
0
0

Texto

(1)

Introdu¸c˜ ao ` a linguagem Perl

Assistente de ensino: Marcelo da Silva Reis1 Professor: Fabio Kon1

1Instituto de Matem´atica e Estat´ıstica, Universidade de S˜ao Paulo

MAC0211 - Laborat´orio de Programa¸c˜ao I 16 de junho de 2009

(2)

Conte´ udo (hoje):

Apresenta¸c˜ao de Perl

Origem da linguagem, principais caracter´ısticas Executando programas em Perl

Tipos de vari´aveis

Escalares, arrays, hashes, ...

Loops e constru¸c˜oes condicionais For, while, foreach, ...

Exerc´ıcios Express˜oes regulares

Matching, substitui¸c˜oes, ...

E/S

Entrada padr˜ao, arquivos

(3)

Para quinta-feira:

I Subrotinas

I Depurando c´odigos em Perl

I CGI/Perl

I Perl em Bioinform´atica

(4)

Conte´ udo

Apresenta¸c˜ao de Perl

Origem da linguagem, principais caracter´ısticas Executando programas em Perl

Tipos de vari´aveis

Escalares, arrays, hashes, ...

Loops e constru¸c˜oes condicionais For, while, foreach, ...

Exerc´ıcios

Express˜oes regulares

Matching, substitui¸c˜oes, ...

E/S

Entrada padr˜ao, arquivos

(5)

Resumo da hist´ oria da linguagem

I Linguagem criada por Larry Wall em 1987

I Desenvolvida para processamento de textos

I Practicalextraction andreportlanguage

I Hoje em dia utilizada para muitas outras aplica¸c˜oes:

I administa¸ao de sistemas

I bioinform´atica

I aplica¸oesweb, etc.

(6)

Principais caracter´ısticas

I Algumas influˆencias: C, awk, Pascal, sed, Unix shell

I Desenvolvida para ser pr´atica (f´acil de usar, eficiente, completa), ao inv´es de “bela” (elegante, minimal)1

I V´arias facilidades para processamento de texto est˜ao

“embutidas” na linguagem

I Atualmente na vers˜ao 5.10 (Perl 6 em desenvolvimento desde 2000).

(7)

”Hello, World!”

Nosso primeiro programa em Perl (hello-world.pl):

#!/usr/bin/perl -w use strict;

my $mensagem = "Hello" . ", " . ’world!’;

print "$mensagem\n";

(8)

Executando programas em Perl

1. Utilizando diretamente o interpretador Perl:

bash$ perl -w hello-world.pl

2. Alterando as permiss˜oes do arquivo .pl (o caminho do interpretador ´e especificado na primeira linha do c´odigo):

#!/usr/bin/perl -w

(9)

Conte´ udo

Apresenta¸c˜ao de Perl

Origem da linguagem, principais caracter´ısticas Executando programas em Perl

Tipos de vari´aveis

Escalares, arrays, hashes, ...

Loops e constru¸c˜oes condicionais For, while, foreach, ...

Exerc´ıcios

Express˜oes regulares

Matching, substitui¸c˜oes, ...

E/S

Entrada padr˜ao, arquivos + Exerc´ıcios

(10)

Escalares

I Representam uma vari´avel simples

I Podem ser strings, n´umeros ou referˆencias

I Com o “use strict” precisam ser pr´e-declarados. Exemplos: my $dia = 16;

my $mes = "junho";

my $pi_nao_tao_preciso = 3.14;

I “Castings” autom´aticos entre tipos. Exemplo:

print "Hoje, $dia de $mes, temos aula de MAC0211\n";

(11)

Escalares

I Representam uma vari´avel simples

I Podem ser strings, n´umeros ou referˆencias

I Com o “use strict” precisam ser pr´e-declarados. Exemplos:

my $dia = 16;

my $mes = "junho";

my $pi_nao_tao_preciso = 3.14;

I “Castings” autom´aticos entre tipos. Exemplo:

print "Hoje, $dia de $mes, temos aula de MAC0211\n";

(12)

Escalares

I Representam uma vari´avel simples

I Podem ser strings, n´umeros ou referˆencias

I Com o “use strict” precisam ser pr´e-declarados. Exemplos:

my $dia = 16;

my $mes = "junho";

my $pi_nao_tao_preciso = 3.14;

I “Castings” autom´aticos entre tipos. Exemplo:

print "Hoje, $dia de $mes, temos aula de MAC0211\n";

(13)

Arrays

Arrays em Perl s˜ao tratados como uma lista de valores. Exemplos:

my @dias = ("dom", "seg", "ter");

my @numeros = (13, 42, 3);

my @mistura = ("jan", 42, 3.14);

(14)

Mais sobre arrays

I Arrays s˜ao zero-indexados. Exemplo:

if ($dias[0] eq ’dom’){

...

}

I “Modo escalar”: if (@dias <= 7){

... }

(15)

Mais sobre arrays

I Arrays s˜ao zero-indexados. Exemplo:

if ($dias[0] eq ’dom’){

...

}

I “Modo escalar”:

if (@dias <= 7){

...

}

(16)

Mais um pouquinho sobre arrays

I Ordenando um array em ordem crescente (num´erica ou lexicogr´afica):

my @numeros_ordenados = sort @numeros;

my @meses_ordenados = sort @meses;

I Invertendo a ordem do vetor:

my @numeros_inv = reverse @numeros;

(17)

Mais um pouquinho sobre arrays

I Ordenando um array em ordem crescente (num´erica ou lexicogr´afica):

my @numeros_ordenados = sort @numeros;

my @meses_ordenados = sort @meses;

I Invertendo a ordem do vetor:

my @numeros_inv = reverse @numeros;

(18)

Hashes

I Em Perl, hashess˜ao uma cole¸c˜ao de valores que s˜ao indexados por chaves (um ´unico elemento por chave). Exemplo:

my %meses = ("1", "jan", "2", "feb");

I Uma outra declara¸c˜ao para o hash acima: my %meses = (1 => "jan", 2 => "feb");

I Acessando um valor de um hash:

$meses{"1"}; # devolve "jan"

(19)

Hashes

I Em Perl, hashess˜ao uma cole¸c˜ao de valores que s˜ao indexados por chaves (um ´unico elemento por chave). Exemplo:

my %meses = ("1", "jan", "2", "feb");

I Uma outra declara¸c˜ao para o hash acima:

my %meses = (1 => "jan", 2 => "feb");

I Acessando um valor de um hash:

$meses{"1"}; # devolve "jan"

(20)

Hashes

I Em Perl, hashess˜ao uma cole¸c˜ao de valores que s˜ao indexados por chaves (um ´unico elemento por chave). Exemplo:

my %meses = ("1", "jan", "2", "feb");

I Uma outra declara¸c˜ao para o hash acima:

my %meses = (1 => "jan", 2 => "feb");

I Acessando um valor de um hash:

$meses{"1"}; # devolve "jan"

(21)

Vari´ aveis especiais

Perl tem v´arias vari´aveis especiais; algumas delas:

$_

@_

@ARGV

%ENV

$1, $2, $3, ...

(o significado de cada uma delas ser´a explicado nas duas aulas)

(22)

Escopo das vari´ aveis

I E poss´ıvel declarar vari´´ aveis sem utilizar o my:

$pi = 3.14;

I Todavia, isso cria uma vari´avel global onde quer que a vari´avel seja declarada, o que ´e uma m´a pr´atica de programa¸c˜ao.

I Solu¸c˜ao: utilizar omy (que cria vari´aveis locais, caso a declara¸c˜ao seja dentro de la¸cos e/ou de subrotinas).

Melhor ainda: utilizar o myem conjunto com ouse strict

(23)

Escopo das vari´ aveis

I E poss´ıvel declarar vari´´ aveis sem utilizar o my:

$pi = 3.14;

I Todavia, isso cria uma vari´avel global onde quer que a vari´avel seja declarada, o que ´e uma m´a pr´atica de programa¸c˜ao.

I Solu¸c˜ao: utilizar omy (que cria vari´aveis locais, caso a declara¸c˜ao seja dentro de la¸cos e/ou de subrotinas).

Melhor ainda: utilizar o myem conjunto com ouse strict

(24)

Escopo das vari´ aveis

I E poss´ıvel declarar vari´´ aveis sem utilizar o my:

$pi = 3.14;

I Todavia, isso cria uma vari´avel global onde quer que a vari´avel seja declarada, o que ´e uma m´a pr´atica de programa¸c˜ao.

I Solu¸c˜ao: utilizar omy (que cria vari´aveis locais, caso a declara¸c˜ao seja dentro de la¸cos e/ou de subrotinas).

Melhor ainda: utilizar o myem conjunto com ouse strict

(25)

Conte´ udo

Apresenta¸c˜ao de Perl

Origem da linguagem, principais caracter´ısticas Executando programas em Perl

Tipos de vari´aveis

Escalares, arrays, hashes, ...

Loops e constru¸c˜oes condicionais For, while, foreach, ...

Exerc´ıcios Express˜oes regulares

Matching, substitui¸c˜oes, ...

E/S

Entrada padr˜ao, arquivos + Exerc´ıcios

(26)

For e While

S˜ao muito parecidas com as suas equivalentes em C:

for (my $i = 0; $i <= 10; $i++){

....

}

while( condicao ){

....

} do{

....

}while( condicao );

(27)

Um exemplo interessante de while

while(<STDIN>){

# captura em $_ uma linha da entrada padrao

# e dentro do laco pode ser realizado

# algum processamento utilizando o $_

}

O comandochompremove o caracter de fim de linha de uma vari´avel.

(28)

If, then, else,...

Tamb´em ´e bem parecido com o de C:

if ( condicao 1 ){

....

}

elsif ( condicao 2 ){

....

} else{

....

}

(29)

Foreach

O loopforeach´e muito mais amig´avel para a manipula¸c˜ao de listas e dehashes:

foreach (@meses) { print "Mes: $_\n";

}

print $numeros[$_] foreach 0 .. 2; # array com 3 elem.

foreach my $chave (keys %meses) { print "Mes: $meses{$chave}\n";

}

(30)

Exerc´ıcio (Learning Perl, 3.1)

Escreva um programa em Perl que leia da entrada padr˜ao uma lista de strings e, ao final do processo, imprima a lista em ordem reversa (para fazer depois no PC, utilize Control+D ou o

redirecionamento de arquivo).

Dicas (sintaxes ´uteis):

while(<STDIN>){ .... }

my @array = reverse @outro_array;

$array[2] = "blabla";

chomp $_;

(31)

Conte´ udo

Apresenta¸c˜ao de Perl

Origem da linguagem, principais caracter´ısticas Executando programas em Perl

Tipos de vari´aveis

Escalares, arrays, hashes, ...

Loops e constru¸c˜oes condicionais For, while, foreach, ...

Exerc´ıcios

Express˜oes regulares

Matching, substitui¸c˜oes, ...

E/S

Entrada padr˜ao, arquivos + Exerc´ıcios

(32)

Express˜ oes regulares

Express˜oes regulares tˆem amplo suporte na linguagem Perl; vamos introduzir algumas opera¸c˜oe b´asicas:

Matching: trata-se da opera¸c˜ao mais elementar. Exemplos:

if (/foo/){ ... } # true se $_ contem "foo"

if ($tmp =~ /foo/){ ... } # true se $tmp contem "foo"

(33)

Substitui¸c˜ oes

S˜ao opera¸c˜oes muito ´uteis na manipula¸c˜ao de strings:

s/foo/bar/; # substitui foo por bar em $_

$tmp =~ s/foo/bar/;

# substitui o primeiro foo encontrado por bar em $tmp

$tmp =~ s/foo/bar/g;

# substitui TODOS os foo por bar em $tmp

(34)

Processamento (captura ou parsing)

Outra coisa legal ´e o processamento de express˜oes regulares.

Exemplo (parsing de um email):

if ($email =~ /([^@]+)@(.+)/) {

print "Nome do usuario: $1\n";

print "Nome do dominio: $2\n";

}

As express˜oes capturadas s˜ao definidas pelos parˆenteses, sendo armazenadas nas vari´aveis $1, $2, etc.

(35)

Conte´ udo

Apresenta¸c˜ao de Perl

Origem da linguagem, principais caracter´ısticas Executando programas em Perl

Tipos de vari´aveis

Escalares, arrays, hashes, ...

Loops e constru¸c˜oes condicionais For, while, foreach, ...

Exerc´ıcios

Express˜oes regulares

Matching, substitui¸c˜oes, ...

E/S

Entrada padr˜ao, arquivos + Exerc´ıcios

(36)

Entrada padr˜ ao

Como vimos anteriormente, oSTDIN´e uma vari´avel de arquivo que pode ser utilizada para ler linhas da entrada padr˜ao:

while(<STDIN>){ .... } my $uma_linha = <STDIN>;

my @varias_linhas = <STDIN>;

(37)

Arquivos

O b´asico para manipula¸c˜ao de arquivos ´e simples:

open(IN, "<" , "input.txt" ) or die "Erro!";

open(OUT, ">" , "output.txt") or die "Erro!";

open(APP, ">>", "append.txt") or die "Erro!";

printf OUT "Escrevendo no arquivo output.txt\n";

while(<IN>){ print $_; printf APP $_; } close(IN);

close(OUT);

close(APP);

(38)

+ Exerc´ıcio

Escreva um programinha Perl que abra um arquivo e imprima na tela todas as siglas de mat´eria do DCC (Exemplo: MAC211, mac5711), ao lado do seu n´umero de ocorrˆencias no arquivo.

Dicas:

open($arq, "<", "arq.txt") or die "blabla";

$string = uc $_; # joga todo o texto para u.case

$variavel =~ /b(bl)a/;

# $1 == ’bl’, precedido de ’b’ e sucedido por ’a’

# Matchings:

# \s+ -> com um ou mais espacos

# \w -> com uma ou mais caracteres alfa-numericos

# \.+ -> com um ou mais qualquer coisa

(39)

Referˆ encias

1. Perl.org. http://www.perl.org/.

Acesso em 10 de junho de 2009.

2. Comprehensive Perl Archive Network.

http://www.cpan.org/.

Acesso em 16 de junho de 2009.

3. Livros da O’Reilly:

I Learning Perl.

I Programming Perl.

Referências

Documentos relacionados

A principal forma de avaliar os fios multifilamentos con- tínuos é mediante o ensaio de tração, que deve ser realizado em equipamento próprio para ensaio de fios têxteis, o qual

rgeom(n, p) distribui¸ c˜ ao Geom´ etrica(p) runif(n, a, b) distribui¸ c˜ ao Uniforme(a,b) rexp(n, lambda) distribui¸ c˜ ao Exponencial(lambda) rnorm(n, mean, sd) distribui¸ c˜

II - os docentes efetivos, com regime de trabalho de 20 (vinte) horas semanais, terão sua carga horária alocada, preferencialmente, para ministrar aulas, sendo o mínimo de 8 (oito)

A Academia Khan 1 atualmente pioneira em novas ferramentas de ensino a distância com a utilização de vídeos em suas aulas, apresenta ferramentas de acompanhamento do desempenho

A amplitude representa a dispers˜ ao entre o menor e o maior valor de um conjunto de dados, entretanto, na presen¸ ca de um outlier, este valor acaba

Durkheim, ao analisar a determinação da sociedade sobre o indivíduo, formulou os conceitos de consciência coletiva e fato social. b) Karl Marx decodificou as leis do capitalismo

Alternativas para a e-PTFE ou para as membranas absorvíveis são a membrana de politetraflouretileno denso (d-PTFE) , que também também precisa de materias de sustentação,

O conceito de colonialidade, a obra de Frantz Fanon (1952;1961) e os princípios metodológicos da psicanálise concreta nos permitiram uma base que orientou