Dkid Posted August 14, 2009 at 11:25 AM Report #283262 Posted August 14, 2009 at 11:25 AM Boas, Venho aqui partilhar um pouco do meu conhecimento, adquirido no livro “Learning Perl – 5th Edition”. O qual devo dizer, para quem não tem problemas de maior em inglês está muito bem explicado! Antes de continuar quero dizer que não se devem cingir apenas ao que estou a partilhar neste tópico, devem, se for do vosso interesse investir na vossa curiosidade, pois eu apenas me estou a iniciar na linguagem. Aconselho-vos também a verem a tabela de “operadores de comparação”, podem ser encontrados nas seguintes hiperligações: • http://www.wdvl.com/Authoring/Languages/Perl/PerlfortheWeb/comparison_table.html • http://www.tizag.com/perlT/perloperators.php • http://docstore.mik.ua/orelly/perl/learn/ch02_04.htm Shebang Sabia para o que era, mas ao inicio não lhe dei importância, até entender que em sistemas Unix faz diferença usa-la. A shebang não é nada menos do que no inicio do documento se declarar da seguinte forma: #!/usr/bin/perl Ao faze-lo estamos a dizer que o compilador se encontra no directório /usr/bin/perl, também existe outra maneira para o caso de não saber o caminho #!/usr/bin/env perl entre outras. Operador chomp Apesar de ainda não entender bem o objectivo real do operador, a sua função principal é quando uma variável acarreta uma string, e nessa string existe um “\n” (newline character) o operador vai-se ver livre do “\n” no final da string. #!/usr/bin/perl chomp($texto="Miguel Angelo \n"); print $texto; print "amanhã encomeda pizzas para o jantar!\n"; print "Indique o seu primeiro e ultimo nome:\n>"; $entrada=<STDIN>; chomp($entrada); print $entrada; print "Indique o seu primeiro e ultimo nome:\n>"; $entrada=<STDIN>; print $entrada; print "A diferença está a vista"; Função defined Em perl até determinada variável ser utilizada esta encontra-se indefinida, para assegurarmo-nos que a mesma foi definida usamos a função defined. #!/usr/bin/perl $tartaruga =<STDIN>; If(defined($tartaruga)) { print “Escreveu : “ .$tartaruga; } else { print “variável não definida”;} Arrays Para quem já tem prática no uso de arrays (que não é o meu forte) o uso de arrays em perl não é nada de novo. No entanto se arrays é algo novo, aconselho a lerem o livro que explica muito bem. Vou tentar dar o meu melhor. #!/usr/bin/perl #Os arrays começam todos em 0 $splinter[0]="Donatelo"; $splinter[1]="Leonardo"; $splinter[2]="Miguel Angelo"; $splinter[3]="Rafael"; print $splinter[0]; #output Donatelo $numero = 2.8; print "\n" . $splinter[$numero +1]; #O mesmo que print splinter[3]; Índice de arrays #!/usr/bin/perl $armas[0]= "Bastão"; #uma arma $armas[1]= "Matracas"; #mais uma $armas[2]= "Sai"; #e mais uma $armas[10]= "Ninjaken"; # e agora temos 7 armas indefinidas (3,4,5,6,7,8,9) $ultimo = $#armas; #se quizermos saber o último elemento no indice print $ultimo; #output : 10 print "\n" .$armas[10]; #output : ninjaken $numero_armas= $ultimo +1; #não é a maneira mais correcta print "\n" .$numero_armas. "\n"; $armas [$#armas] = 'pizza';#a ultima arma print $armas[5]; #como não é definida vai dar um erro Como a maneira de ir buscar o ultimo elemento não é a mais correcta, existe uma outra maneira de o fazer. #!/usr/bin/perl $armas[0]= "Bastão"; #uma arma $armas[1]= "Matracas"; #mais uma $armas[2]= "Sai"; #e mais uma $armas[10]= "Ninjaken"; # e agora temos 7 armas indefinidas (3,4,5,6,7,8,9) $armas[-1] = 'pizza'; print $armas[-1]; #output : pizza $primeira = $armas[-11]; print "\n" .$primeira . "\n"; #output : Bastão $armas[-20] = 'erro'; #fatal error: #uma vez que só temos um array até 11 elementos [0 a 10]. Fonte: Livro “Learning Perl – 5th Edition” Personagens TMNT para os exemplos Hiperligações de interesse • www.pm.org – Perl Mongers • www.cpan.org – CPAN – Comprehensive Perl Archive Network • http://perldoc.perl.org –Perldoc, bons contem exemplos • http://faq.perl.org – PerlFaq, contem a ultima versão do perlfaq PS:Espero que de certa forma vos seja útil para se iniciarem, pois é uma linguagem com um grande potencial. Se quiserem poderei continuar, apenas parei por aqui pois não sei qual será a vossa reacção. I promise that I will not change the PATH variable again other than:PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
falco Posted August 14, 2009 at 12:12 PM Report #283274 Posted August 14, 2009 at 12:12 PM A minha recomendação é que nunca faças perl sem ter depois da shebang o seguinte: use strict; use warnings; chomp não é um operador... É uma função que faz parte do Perl. O objectivo é simples. Mas primeiro tens que te lembrar de onde vem o Perl. O Perl é inspirado em linguagens com o AWK, o AWK é feito para processar texto. Em todos os ficheiros, quando queremos guardar dados temos que saber onde começa e onde acaba cada registo. Para isso utilizamos aquilo a que se chama record separator. Quando obtemos o input esse input inclui os dados todos que foram introduzidos, o que inclui o record separator. Nesse caso o record separator é um input record separator. O que o chomp faz é retirar o input record separator do fim de uma string. O que é útil, porque para o processamento dos dados isso não costuma ser minimamente útil só para os receber, ou para os enviar. Em perl até determinada variável ser utilizada esta encontra-se indefinida Não é até ser usada, é até ser inicializada, ou seja até lhe ser atribuído um valor. Por exemplo: my $a;print $a; $a = 1; Neste exemplo eu utilizei a variável antes de inicializar. Ela só foi inicializada quando lhe foi atribuído um valor. Atenção à utilização de defined numa hash. Se por exemplo quiseres verificar se um chave existe, usa a função exists, mas isso não diz se há um valor definido para essa chave. A chave pode corresponder a um valor undef, e por isso se quiseres saber se há valor para a chave usa defined: "defined $hash{'chave'};" Como a maneira de ir buscar o ultimo elemento não é a mais correcta, existe uma outra maneira de o fazer. Não é? Mas porque é que não é? Não há melhor forma que essa para ir buscar o valor do ultimo elemento de um array.
Dkid Posted August 14, 2009 at 12:29 PM Author Report #283279 Posted August 14, 2009 at 12:29 PM Agora é que me matam ? A minha recomendação é que nunca faças perl sem ter depois da shebang o seguinte: use strict; use warnings; Tens razão, já tinha aprendido contigo isso, mas ontem à noite com a vontade de fazer mais um tópico perl, acabei por me esquecer. shame on me! chomp não é um operador... É uma função que faz parte do Perl. Talvez o meu inglês não esteja muito bom, mas como estava a ler do livro (que é em inglês), o que eles dizem é o seguinte : The first time you read about the chomp operator, it seems terribly overspecialized. It works on a variable. The variable has to hold a string. And if the string ends in a newline character, chomp can get rid of the newline. That's (nearly) all it does. fonte: http://hell.org.ua/Docs/oreilly/perl3/lperl/ch02_09.htm Não é? Mas porque é que não é? Não há melhor forma que essa para ir buscar o valor do ultimo elemento de um array. Mais uma vez apenas fui pelo o que o livro diz: Larry has provided a shortcut: negative array indices count from the end of the array. But don't get the idea that these indices "wrap around." If you've got three elements in the array, the valid negative indices are -1 (the last element), -2 (the middle element), and -3 (the first element). In the real world, nobody seems to use any of these except -1, though. fonte: http://hell.org.ua/Docs/oreilly/perl3/lperl/ch03_02.htm Quanto à variável indefinida, tens razão, eu é que entendi mal! ? Obrigado pela atenção e explicações (assim até dá vontade de continuar!!!). I promise that I will not change the PATH variable again other than:PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
falco Posted August 17, 2009 at 11:37 AM Report #283582 Posted August 17, 2009 at 11:37 AM A respeito da função chomp, ela é uma função e é por isso que vem listada na lista de funções do Perl: http://perldoc.perl.org/functions/chomp.html Quanto à questão dos arrays. Estás a confundir, o obter o valor do último elemento de um array, com o obter o número de elementos de um array. Obter o número de elementos de um array pode ser feito facilmente e de várias formas: my $array_size = @array; ou mais explicitamente my $array_size = scallar @array; obter o último valor de um array pode ser feito de várias formas, umas destrutivas, outras nem tanto: forma destrutiva: my $last = pop(@array); forma não destrutiva: my $last = $array[$#array]; Utilizar os indíces negativos é como se tivesse o array ordenado de forma invertida. Não conhecia isso, com o Perl aprendemos sempre novas formas de fazer as coisas (permite muito mais flexibilidade sintáctica que as outras linguagens). Duvido que muitos programadores de Perl utilizem essa forma de fazer as coisas e que muitos conheçam, ou se lembrem que existe e a não ser que seja terrivelmente conveniente essa é a razão pela qual acho que a outra forma é uma boa prática (até porque é mais semelhante às outras linguagens de programação). Se usares, mete um comentário a explicar o que se trata.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now