+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ___ Language: Portuguese Brazilian. .' `"-._ Encode: UTF-8. / , `'-.-. / /`'. ,' _ \ `-' `-. ,' ,'\\/ \, ,' ee`-. Und3rZ1n3 0x01 - Perl para iniciantes. / ./ ,(_ \ , Escrito por Constantine, 17 de Janeiro de 2015. (_/\\\ \__|`--' || ///\\| \ || ////||-./`-.} .--|| / `-.__.-`_.-.| 'A mente que domina a magia dos | '._,-'`|___} `; bits controla o mundo!' / '. |/ || ,;'` - Constantine | '.__,.-` || ':, | | || ,;' / / _,.||oOoO.,_ | | \-.O,o_O..-/ Greatz for L1sbeth and P0cl4bs Team. / / / \ https://github.com/P0cL4bs | / / \ | | | , | / | \ ) ( ) / | \ ,'.(:, ),: (_.'. / /'.' ="`""="="=="= '. `'"---'-.__.'"""` ` "" "" `"" constantine.sourceforge.net +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |=[ Tabela de conteúdo ]=--------------------------------------------------------------------------=| | 0x4A - Apresentação e introdução ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | 0x00 - Interpretador ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | 0x01 - Comentários ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | 0x02 - Módulos ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | 0x03 - Variáveis ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | 0x04 - Condições ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | 0x05 - Repetições ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | 0x06 - Operadores e caracteres especiais ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | 0x07 - Entrada e saída de dados ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | 0x08 - Funções/Sub-rotinas ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | 0x09 - Manipulação de variáveis/dados ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | 0x0a - Regex ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | 0x0b - Manipulação de arquivos ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | 0x0c - Sockets ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | 0x0d - Threads ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | 0x0e - Orientação a Objetos (POO) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | 0x0f - Finalização ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |=-------------------------------------------------------------------------------------------------=| |=[ 0x4A - Apresentação e introdução ]=------------------------------------------------------------=| Olá, prazer, antes de tudo quero me desculpar por meus erros de português. Se você nunca ouviu falar sobre Perl, tenha em mente que ela é uma linguagem de programação, e uma linguagem de programação podemos dizer que são instruções para a máquina (seu computador) executar, é basicamente assim que os programas de computador são feitos, apenas um código que contém uma sequência de instruções. Caso esteja na dúvida sobre alguns itens citados no texto, não se preocupe pois no final tudo fica mais claro. Neste texto darei uma breve e superficial introdução sobre a Linguagem de Programação Perl. Falarei sobre coisas básicas porém essenciais para criação de uma quantidade enorme de softwares. Sem mais, vamos ao que interessa. |=[ 0x00 - Interpretador ]=------------------------------------------------------------------------=| Basicamente, o interpretador da linguagem Perl é o programa responsável por ler nosso código escrito na linguagem e executar as instruções diretamente na máquina. Em ambiente Linux, BSD, *NIX em geral, devemos setar no início de nosso código fonte o texto abaixo, o mesmo está dizendo onde se encontra nosso interpretador Perl que será necessário para ler nosso código. #!/usr/bin/perl Apenas para deixar claro, se por acaso você usa Windows, não se preocupe, basta setar o mesmo texto, e quando instalar o Active Perl (faça download do mesmo se não tem instalado em sua máquina), ele vai converter esse caminho para o caminho do interpretador no Windows, ou seja, por padrão será convertido de '#!/usr/bin/perl' para algo como '#!C:\Program Files\Perl\bin\perl.exe'. E apenas para deixar claro, para executar um programa em perl, abrimos o terminal (ou cmd caso esteja no Windows) e digitar o seguinte texto. perl programa.pl Onde 'programa.pl' se refere ao arquivo de texto salvo com o código Perl dentro. |=[ 0x01 - Comentários ]=--------------------------------------------------------------------------=| Um comentário é todo texto que deve ser ignorado pelo interpretador da linguagem. Para fazer uso de comentários em Perl utilizamos o caracter '#' no início da linha. Segue o exemplo abaixo. # Isso é um comentário em Perl # Este texto será sempre ignorado pelo interpretador. |=[ 0x02 - Módulos ]=------------------------------------------------------------------------------=| Os módulos são necessários para poder fazer o uso de determinados itens da linguagem, coisas como funções, comandos para controles de fluxo, dentre outros. Basicamente para fazer uso de algum módulo utilizamos o comando 'use'. Por exemplo, para poder utilizar sockets (Não se preocupe se não souber o que é socket, mais para frente falaremos sobre isso) devemos fazer o uso do módulo 'Sockets', para isso fazemos: use Sockets; |=[ 0x03 - Variáveis ]=----------------------------------------------------------------------------=| Variáveis são regiões frequentemente localizada na memória onde são referenciadas por um nome. Por exemplo, se queremos armazenar o valor '10' em algum local, devemos utilizar uma variável, o mesmo vale para textos e outras coisas. Portanto vamos para alguns exemplos simples, se por acaso eu queira guardar o texto 'Hello World!' em algum local para fazer uso do mesmo posteriormente, basta eu criar uma variável com qualquer nome da seguinte maneira. my $meu_texto = "Hello World!"; Nesse caso acima, nossa variável se chama '$meu_texto', sempre que precisar fazer o uso da mesma, basta utilizar o nome '$meu_texto' pois dentro dele que se encontra do texto 'Hello World'. No exemplo acima fizemos o uso de uma variável para armazenar texto, para armazenar números basta fazer como no exemplo abaixo. my $meu_numero = 10; Obs: Não foi citado anteriormente, mas o caracter ';' (ponto e virgula) significa o fim de um comando. Por fim, para armazenar listas, o que podemos e vamos chamar de arrays ou vetores futuramente, fazemos como no exemplo abaixo. my @lista = ( "Item 1 da lista", "Item 2 da lista", "Item 3 da lista" ); Para ter acesso aos itens da do vetor acima, devemos especificar seu indice, onde o mesmo é iniciado em 0. Portanto, segue a lógica do 'desenho' abaixo. @lista [0] = "Item 1 da lista"; @lista [1] = "Item 2 da lista"; @lista [2] = "Item 3 da lista"; Observe que em todos os exemplos de variaveis, sempre que precisamos acesar os dados contidos dentro delas, utilizamos como referencia o nome da mesma, no caso utilizamos o nome '$meu_texto' para ter acesso ao texto 'Hello World!' que estava armazendo 'dentro' dela, no exemplo seguinte, para ter acesso ao número '10', utilizamos o nome '$meu_numero', e por fim, no exemplo com vetores, para ter acesso a seus itens utilizamos seu indice que é iniciado em 0, '@lista [0]' para ter acesso ao texto 'Item 1 da lista' e assim sucessivamente. Agora falaremos de um tipo de variável diferente chamada de 'hash', onde podemos especificar o nome de nossas referencias de uma maneira um pouco diferente. Segue abaixo um exemplo da mesma. %minha_hash_variavel = ('nome', 'Constantine', 'idade', '20', 'language', 'Perl'); A maneira de acessar os itens dessa variável segue a seguinte lógica... $minha_hash_var{'nome'} contém o texto 'Constantine'. $minha_hash_var{'idade'} contém o texto '20'. $minha_hash_var{'language'} contém o texto 'Perl'. |=[ 0x04 - Condições ]=----------------------------------------------------------------------------=| Para escrever um programa, como são muitas coisas a serem feitas, precisamos de algo onde podemos desviar o fluxo dos dados manipulados no programa. Por exemplo, vamos imaginar que nosso programa verifica se o computador tem conexão com a internet, dependendo da resposta retornada vamos realizar alguma ação. Portanto um algoritmo ficaria algo como o exemplo abaixo. SE CONEXAO_COM_INTERNET_EXISTE FAÇA ALGO SE NÂO FAÇA OUTRA COISA Basicamente, o programa acima faz uma verificação, se 'CONEXAO_COM_INTERNET_EXISTE' for verdadeiro, então entra no 'FAÇA ALGO', caso contrário, se não existir conexão com a internet, ele não deve executar o 'FAÇA ALGO' e sim o 'FAÇA OUTRA COISA'. Em Perl para controle de condições temos o comando 'if', 'elsif' e 'else'. Vamos para alguns códigos de exemplo. No código abaixo, criamos uma variável com o valor 10 e verificamos se o valor atribuido a ela é maior que 5. my $variavel = 10; if ( $variavel > 5 ) { # Aqui entra o código a ser executado se por acaso a '$variavel' for maior que 5. } Lembrando que toda linha que começar com o caracter '#' significa que é um comentário e isso não é interpretado como código. Observe que fizemos apenas o uso do comando 'if', o caracter '>' significa 'maior que', portanto o código 'if ( $variavel > 5 )' seria o equivalente a 'SE $variavel É MAIOR QUE 5' e se for verdadeiro, ou seja, se realmente o valor que está armazenado na '$variavel' for maior que 5, execute o bloco de código que está dentro dos chaves { }, uma abre o bloco de código '}' e a outra fecha o bloco '}'. No exemplo seguinte vamos fazer uso do 'if' e do 'else'. my $variavel = 4; if ( $variavel > 5 ) { # Aqui entra o código a ser executado se por acaso a '$variavel' for maior que 5. } else { # O valor armazenado em '$variavel' não é maior que 5, então executado esse bloco de código. } Se por acaso a '$variavel' não for maior que 5, automaticamente o 'else' é executado. Agora vamos fazer um exemplo, utilizando o 'if', 'elsif' e 'else', segue o exemplo abaixo. my $variavel = 3; if ( $variavel > 5 ) { # Executa esse bloco de código se o valor armazenado em '$variavel' for maior que 5. } elsif ( $variavel < 2 ) { # Executa esse bloco de código se o valor armazenado em '$variavel' for menor que 2. } else { # Nenhuma das condições acima foi dada como verdadeira, por padrão, executa então o 'else'. # Sendo ele esse bloco de código. } A lógica das condições acima na verdade é bem simples e apenas uma será executada, ou seja, se o primeiro 'if' for verdadeiro, então executa apenas ele e não será executado o 'elsif' e nem o 'else'. Para controle de condições temos também o comando 'unless', vamos seguir o raciocínio, o 'if' em sua natureza significa 'SE FOR VERDADE', vamos pegar como exemplo o 'if' do exemplo acima. if ( $variavel > 5 ) { ... No 'if' acima, observe que fazemos o uso de colchetes ( ), ou seja, a expressão definida dentro dos colchetes será analizada, e se o resultado for verdadeiro, ai sim ele executa o bloco de código. Basicamente o 'if' faz uma 'pergunta', sendo algo como. 'É VERDADE QUE O VALOR ARMAZENADO EM $variavel É MAIOR QUE 5?' Se a resposta for verdadeira, ou seja, se realmente o valor armazenado em '$variavel' for mesmo maior que 5, então executa o bloco de código. O comando unless funciona com a lógica contrária, ou seja, ao invés de pergunta 'SE É VERDADE...' ele pergunta 'SE NÃO É VERDADE', vamos a um exemplo prática. my $variavel = 7; unless ( $variavel < 5 ) { # Executa bloco de código se o conteúdo armazenado em '$variavel' NÃO for menor que 5. # Esse bloco de código será executado pois '$variavel' não é menor que 5, ela contém o valor 7. } Para deixar mais claro, o comando acima é lido da seguinte maneira: 'SE O CONTEÚDO ARMAZENADO EM $variavel NÃO FOR MENOR QUE 5...', se essa expressão como um todo é verdadeira, ou seja, se realmente o conteúdo armazenado em '$variavel' não for menor que 5, então o bloco de código ( que é os dados entre as chaves) é executado. E por fim, para terminar os comandos utilizados para trabalhar com condições, vamos falar agora do 'switch', para fazer o uso do mesmo, é necessário declarar um módulo chamado 'Switch' e para isso fazemos como no exemplo abaixo. use Switch; Vamos então para um exemplo de uso do comando 'switch'. O código ao todo ficaria. #!/usr/bin/perl use Switch; my $variavel = 1; switch ( $variavel ) { case (0) { # Esse bloco de código não será executado, pois '$variavel' não é igual a 0. } case (1) { # Esse bloco de código será executado, pois '$variavel' é igual a 1. } case (2) { # Esse bloco de código não será executado, pois '$variavel' não é igual a 2. } else { # Esse bloco de código não será executado, pois '$variavel' é igual a 1 e já existe o 'case (1)' para isso. # Mas se por acaso nenhum dos 'case' acima fosse dado como verdadeiro, então esse 'else' aqui seria executado. } } A lógica do 'switch' na verdade é muito simples, ele avalia o valor que está armazenado em '$variavel' e tem os 'case' para achar o valor representado, portanto 'case (1)' equivale a 'SE O VALOR EM $variavel É IGUAL A 1...', ai entro no bloco de código. Para testar o código, basta salvar com algum nome qualquer, por exemplo, 'programa.pl' ou pode ser 'programa.txt', em seguida abrir o terminal (ou cmd, caso esteja no Windows) e rodar o programa. perl programa.pl ou perl programa.txt |=[ 0x05 - Repetições ]=---------------------------------------------------------------------------=| Repetições podemos dizer que são blocos de códigos, onde seus valores são sendo modificados em tempo real, e para não escrever centenas ou milhares de linhas, utilizamos algum comando de repetição, para resumir essa instruçao (ou sequência de instruções, como queira chamar) de código. Vamos falar aqui nessa área de repetição sobre 3 comandos, sendo eles o 'for', 'while' e 'foreach'. Vamos começar com o comando 'for'. O comando 'for' é repartido em 3 partes, onde elas são separadas por ';' (ponto e virgula). Basicamente seria assim seu algoritmo. for ( INICIALIZAÇÃO ; CONDIÇÃO ; INCREMENTO ) { # bloco de código que será executado enquando a CONDIÇÃO for VERDADEIRA. } Vamos para um exemplo prático para que fique mais claro. No exemplo abaixo vamos criar uma variável com o valor 0 e utilizar ela em nosso for. Essa variável será incrementada em 1, ou seja, a cada vez que o bloco de código for repetido será somado mais 1 nessa variável. my $variavel = 0; for ( $variavel = 0; $variavel <= 10 ; $variavel = $variavel + 1 ) { # Bloco de código que será executado até que '$variavel <= 10', ou seja, até que o valor armazenado # em '$variavel' seja menor ou igual a 10. Após isso, ou seja, a partir do momento em que o valor # armazenado em '$variavel' for maior que 10, o for será encerrado e esse bloco de código irá parar # de ser executado. } Lembrando que o 'for' é dividido em três partes sendo elas separadas por ';' (ponto e virgula). No início do 'for' temos então a 'INICIALIZAÇÃO', sendo ela representada por '$variavel = 0', onde a '$variavel' é inicializada com o valor 0. Após isso temos a parte do meio do 'for', sendo ela a 'CONDIÇÃO', representada por '$variavel <= 10', essa condição seria parecida com o 'if', é como se a cada vez que o bloco de código fosse executado o 'for' verificasse 'SE O VALOR EM $variavel É MENOR OU IGUAL A 10', quando o valor armazenado em '$variavel' for maior que 10, ou seja, quando deixar de ser 'menor ou igual a 10', o 'for' é encerrado e o bloco de código deixa de ser executado repetidas vezes. Por fim, temos a parte final do 'for', sendo ela representada por '$variavel = $variavel + 1', a cada vez que o bloco de código é executado (lembrando que o mesmo é executado até que a CONDIÇÃO seja falsa) o INCREMENTO é também executado, ou seja, a cada vez que o 'for' é executado o valor especificado em '$variavel' é incrementada em 1, sendo assim, somado 1 na própria variável. Para deixar claro, o 'for' de exemplo acima é executado 10 vezes e depois finalizado. Vamos agora falar do comando 'while'. O comando 'while' é executado até que sua EXPRESSÃO seja dada como falsa, ou seja, ele sempre ficará executando seu bloco de código até que sua expressão seja dada como falsa ou você force a parada dele. Segue abaixo o algoritmo do comando 'while'. while ( EXPRESSÃO ) { # Executa bloco de código até que a EXPRESSÃO seja falsa. } Vamos para um exemplo prático. my $variavel = 0; while ( $variavel <= 10 ) { # Executa bloco de código até que o valor armazenado em '$variavel' seja menor ou igual a 10. $variavel = $variavel + 1; } Observe que a '$variavel' foi definida fora do 'while' com o valor 0, dentro do bloco de código do 'while' a '$variavel' é sempre incrementada em 1 assim como na parte de INCREMENTO de nosso 'for' de exemplo anterior. O 'while' ficará sempre sendo executado até que o valor armazenado em '$variavel' seja menor ou igual a 10. Por fim, vamos fazer uso do comando 'foreach'. Um algoritmo para o 'foreach' poderia ser algo como o exemplo abaixo. foreach INDICE ( DADOS ) { # Executa bloco de código enquanto exitir dados. } Vamos para um exemplo prático. No exemplo abaixo estamos percorrendo os itens de um vetor do início ao fim do mesmo. @lista = ( 'uva', 'goiaba', 'laranja' ); foreach $indice ( @lista ) { # Usar a variável '$indice' para acessar os itens da '@lista'. } O bloco de código do comando 'foreach' acima será executado 3 vezes, a variável '$indice' estará apontando para um item da '@lista'. Segue o exemplo abaixo para deixar mais claro. primeira execução do bloco de código = $indice contém o valor 'uva'. segunda execução do bloco de código = $indice contém o valor 'goiaba'. terceira execução do bloco de código = $indice contém o valor 'laranja'. |=[ 0x06 - Operadores e caracteres especiais ]=----------------------------------------------------=| Como vemos nos comandos exemplos de códigos dos tópicos acima, utilizamos coisas como '<=', '>' e '<', onde significam 'menor ou igual', 'maior que', 'menor que', etc. Agora vou dar para vocês mais detalhes sobre os operadores existentes na linguagem Perl. Segue abaixo uma lista dos símbolos e sua descrição falando sobre a funcionalidade do mesmo. Operadores matemáticos. + Soma - Subtrai * Multiplica / Divisão ** Potenciação % Resto da divisão Operadores para incremento e decremento. $a++ Retorna variável '$a' e depois incrementa. ++$a Incrementa variável '$a' e depois retorna. $a-- Retorna variável '$a' e depois decrementa. --$a Decrementa variável '$a' e depois retorna. Operadores para strings/textos. . Concatena. x Repete texto. Operadores para determinar valores. $a = $b Atribui o valor de '$b' em '$a'. $a += $b Soma o valor de '$b' ao valor de '$a'. $a -= $b Subtrai o valor de '$b' ao valor de '$a'. $a .= $b Concatena o valor de '$b' em '$a'. $a == $b Compara o valor de '$a' com '$b'. Não se preocupe em decorar os operadores, com o tempo e prática tudo fica muito mais simples. Os caracteres especiais são utilizados em strings. Segue abaixo os caracteres especiais e sua descrição. \n Nova linha. \r Retorno \ Carriage return. \b Backspace. \a Emite beep (alert, alarm). \t Tabulação. \e Caracter ESC. Existem outros caracteres especiais, em caso de duvida consulte a referencia da Linguagem Perl em seu site oficial. |=[ 0x07 - Entrada e saída de dados ]=-------------------------------------------------------------=| Como o que estamos fazendo é escrever software, obviamente temos de ter meios para o usuário entrar com dados, como também temos de ter meios para exibir os dados (saida dos dados). Para isso vamos por partes, primeiro vamos ver como podemos fazer para receber dados via linha de comando. Para isso fazemos o uso da variável @ARGV. Onde seu indice é inicializado em 0. Segue abaixo um exemplo. perl script.pl parametro01 parametro02 parametro03 Na variável @ARGV automaticamente será setado os valores dos parametros e como foi dito, tendo sua indexação inciada em 0. Portanto segue a abaixo os indeces da variável e seus respectivos valores. @ARGV [0] contém o valor "parametro01" @ARGV [1] contém o valor "parametro02" @ARGV [2] contém o valor "parametro03" Para entrada de dados enquanto o programa estiver executando, utilizando o ''. Basta definir uma variável atribuindo para ela como valor o ''. O programa irá 'pausar', ele vai ficar aguardando o usuário digitar algo e pressionar enter, após o pressionamento da tecla enter o programa prossegue normalmente. Segue abaixo um exemplo com ''. my $variavel = ''; Por fim, para exibir dados na tela (saida de dados), podemos fazer uso do print. Sendo ela (o print) na verdade uma função que pega seus dados e envia para saida de dado padrão (que no caso é o terminal (ou console caso esteja no Windows)). Para usar a função é simples, vamos por exemplo exibir um texto na tela. Para isso fazemos como o exemplo abaixo. print "Esse texto será exibido na tela!\n"; Obs: O caracter '\n' no final do texto, significa que após exibir o texto ele vai pular uma linha. |=[ 0x08 - Funções/Sub-rotinas ]=------------------------------------------------------------------=| Podemos dizer que uma função ou sub-rotina consiste em um bloco de código, onde o mesmo pode ou não retornar um valor, mas geralmente na maioria dos casos é utilizadas pra resolver um problema especifico ou apenas para deixar o código mais organizado, digamos em áreas. Uma função em Perl começa com a palavra 'sub', a sintaxe seria. sub nome_da_funcao { # Código da função aqui. } Abaixo um exemplo de uma função que não recebe parametros e apenas exibe uma mensagem na tela com a função print. sub exibe_mensagem { print "Hello World!\n"; } Para chamar a função, basta escrever o nome da mesma seguida do ponto e virgula para indicar termino do comando. Como no exemplo abaixo. exibe_mensagem; Agora vamos ver um exemplo de uma função que recebe parametros, vamos fazer uma função que recebe como parametros dois números para que seja realizado uma soma, em seguida, exibir o resultado na tela. sub funcao_somar { @argv = @_; # Processa argumentos recebidos. $a = $argv[0]; # Primeiro item passado via parametro, no caso o valor 10. $b = $argv[1]; # Segundo item passado via parametro, no caso o valor 20. $c = $a + $b; # Armazena o resultado da soma, que no caso é 10 + 20. print $c . "\n"; # Exibe o resultado na tela com a função print. } funcao_somar ( 10, 20 ); # Chama função passando como parametro os valores 10 e 20. Observe que utilizamos o . (ponto) para concatenar os dados, mais para frente vamos falar mais sobre isso. O resultado exibe na tela é 30. Por fim, vamos ver um simples exemplo de uma função que retorne algo, em Perl, como não temos tipos de dados definidos podemos retornar qualquer coisa, tanto strings como números. Para isso basta fazer uso do comando 'return'. Vamos usar como exemplo a função acima, porém, ao invés de exibir uma mensagem na tela, vamos retornar a mensagem para que a função 'print' seja chamada fora da 'funcao_somar'. sub funcao_somar { @argv = @_; # Processa argumentos recebidos. $a = $argv[0]; # Primeiro item passado via parametro, no caso o valor 10. $b = $argv[1]; # Segundo item passado via parametro, no caso o valor 20. $c = $a + $b; # Armazena o resultado da soma, que no caso é 10 + 20. return $c . "\n"; # Concatena dados e retorna para local que a chamou. } print funcao_somar ( 10, 20 ); # Chama função print passando como parametro outra função, onde # a mesma retorna os dados que serão exibidos, sendo esses dados # o resultado da soma de 10 + 20. O número 30 é exibido na tela. |=[ 0x09 - Manipulação de variáveis/dados ]=-------------------------------------------------------=| Não vamos nos aprofundar muito na manipulação dos dados, darei aqui apenas alguns exemplos simples de como realizar algumas ações muito uteis no dia-a-dia. Vamos lá. Para comparação de inteiros, como já foi citado no tópico de '0x06 - Operadores e caracteres especiais' o operador '==' que significa 'se for igual'. Segue abaixo um exemplo. my $a = 10; my $b = 10; if ( $a == $b ) { print "Variavel A e igual a variavel B.\n"; } else { print "Variaveis com valores diferentes.\n"; } Para comparação de strings utilizamos o operador '=~', vamos para um exemplo. my $string_a = 10; my $string_b = 10; if ( $string_a =~ $string_b ) { print "Variavel STRING_A e igual a variavel STRING_B.\n"; } else { print "Variaveis com valores diferentes.\n"; } Para concatenação de inteiros e strings utilizamos o . (ponto). Vamos para um exemplo. my $string_a = "texto 01"; my $string_b = "texto 02"; my $string_c = $string_a . " " . $string_b . "\n"; print $string_c; # Exibe mensagem: 'texto 01 texto 02'. Outro método de concatenar é utilizar o '.='. Vamos para um exemplo. my $string_a = "texto 01"; my $string_b = "texto 02"; my $string_c = ""; $string_c .= $string_a; $string_c .= " "; $string_c .= $string_b; $string_c .= "\n"; print $string_c; # Exibe mensagem: 'texto 01 texto 02'. Procura string dentro de outra. Vamos para um exemplo. my $string = "Esse eh meu texto onde vou procurar algo dentro dele!"; if ( index ( $string, "texto" ) ) { print "Achou 'texto' dentro da string.\n"; } else { print "Nada foi encontrado.\n"; } |=[ 0x0a - Regex ]=--------------------------------------------------------------------------------=| Não vamos nos aprofundar também no uso das regex, pois existem muitas. Darei alguns exemplos para mostrar como seria o uso simples de regex em Perl, inclusive Perl é muito famosa por ser extremamente flexivel nessa questão, o que faz Perl uma das linguagens preferidas entre os sysadmins. Verifica se existem as letras de 'a' até 'z' maiúsculo e minúsculo. my $variavel = "Testando palavra."; if ($variavel =~ /[a-zA-Z]/) { print "Isso e uma palavra\n"; } Verifica se são apenas números. my $variavel = "0123456789"; if ($variavel =~ /[0-9]/) { print "Isso é apenas números\n"; } Recomendo que busquem informação no Google sobre o uso de Regex em Perl pois realmente tem muita coisa interessante. |=[ 0x0b - Manipulação de arquivos ]=--------------------------------------------------------------=| Vamos ver agora como podemos para realizar ações simples com arquivos. Coisas como ler e escrever em arquivo de texto. Para isso vamos utilizar a função 'open' para abrir o arquivo e a função 'close' para fechar o mesmo, dentre outras. Segue abaixo um exemplo onde escrevemos um buffer no arquivo de texto. #!/usr/bin/perl # Buffer que será salvo. @lista = ( "Meu buffer numero 01\n", "Meu buffer numero 02\n", "Meu buffer numero 03\n" ); # Abre arquivo para escrita. open (my $handle, ">", "arquivo.txt"); # Salva dados no arquivo. print {$handle} @lista; # Fecha arquivo. close ($handle); Segue abaixo um exemplo onde lemos o conteúdo de um arquivo de texto. #!/usr/bin/perl # Abre arquivo para escrita. open (my $handle, "<", "arquivo.txt"); # Percorre arquivo de texto. while (<$handle>) { print "$_"; # '$_' é uma variável interna. } # Fecha arquivo. close ($handle); Verifica se determinado arquivo ou diretório existem. if (-e "arquivo.txt") { print "arquivo.txt existe!\n"; } Renomeando arquivos com tratamento de erro (função die). rename ("arquivo.txt", "arquivo_rename.txt") || die ("Nao foi possivel renomear arquivos.\n"); Copia arquivo. copy ("arquivo_rename.txt", "arquivo_rename_2.txt"); move ("arquivo_rename_2.txt", "arquivo_rename.txt"); Deleta arquivos. unlink ("arquivo_rename.txt"); Deletar diretórios. rmdir ("diretorio"); Ler conteúdo de diretório. opendir ($handle, "."); # Abre diretorio atual. @files = readdir ($handle); foreach (@files) { print "file: $_\n"; } closedir ($handle); # Fecha diretorio. Criar diretorio. mkdir ("newdir", 0777) || print "Nao foi possivel criar diretorio.\n"; |=[ 0x0c - Sockets ]=------------------------------------------------------------------------------=| Para estabelecer qualquer gênero de conexão com outro computador da internet, é necessário fazer uso de sockets independente da linguagem de programação. Recomendo que pesquise sobre sockets e aprenda o máximo possível. Vou aqui dar dois exemplos de uso de sockets. Lembrando que para fazer uso de sockets em Perl, devemos declarar o módulo 'Socket'. Exemplo de conexão simples com IRC. # Módulo necessário para utilizar sockets. use Socket; # Endereço e porta do IRC. my $host = "irc.freenode.net"; my $port = 6667; my $name = "bot_nick_666"; print "Conectando no IRC...\n"; # Criando conexão. socket ( SOCKET, PF_INET, SOCK_STREAM, (getprotobyname('tcp'))[2] ) or die "Can't create a socket!\n"; # Conecta em host. connect ( SOCKET, pack_sockaddr_in($port, inet_aton($host)) ) or die "Can't connect to port $port!\n"; print "Connected on $host $port\n"; # Envia dados para servidor IRC. send ( SOCKET, "NICK $name\r\n", 0 ); send ( SOCKET, "USER $name * * :$name\r\n", 0 ); send ( SOCKET, "QUIT\r\n", 0 ); print "Quiting IRC...\nConnection closed!\n"; # Fecha conexão. close ( SOCKET ); Exemplo de conexão com website. # Módulo necessário para utilizar sockets. use Socket; # Endereço e porta. my $host = "google.com"; my $port = 80; print "Conectando no IRC...\n"; # Criando conexão. socket ( SOCKET, PF_INET, SOCK_STREAM, (getprotobyname('tcp'))[2] ) or die "Can't create a socket!\n"; # Conecta em host. connect ( SOCKET, pack_sockaddr_in($port, inet_aton($host)) ) or die "Can't connect to port $port!\n"; @header = ( "GET / HTTP/1.1\r\n", "Host: google.com\r\n", "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0\r\n", "Connection: Close\r\n\r\n" ); # Envia dados para servidor. foreach my $index (@header) { send ( SOCKET, $index, 0 ); } # Recebe dados do servidor. while () { print "$_"; } # Fecha conexão. close ( SOCKET ); print "Connection closed!\n"; |=[ 0x0d - Threads ]=------------------------------------------------------------------------------=| As vezes quando seu software fica muito grande e com muitas funcionalidades você sente a necessidade de fazer o uso de multiplos processos ao mesmo instante, para isso existe as threads, ela faz com que sua função seja aberta em um sub-processo. Para fazer uso de threads em Perl devemos definir o módulo 'Threads'. Segue abaixo um exemplo de código pronto, utilizando threads. #!/usr/bin/perl use Threads; # Módulo necessário para utilização de threads. # Função que será aberta em sub-processo. sub funcao { for ( my $a = 0; $a < 5 ; $a++ ) { print "[$a] - Thread called: @_[0]\n"; # Exibe mensagem com número do loop e dados passado # via parametro no momento de criação da thread. sleep 1; # Aguarda 1 segundo. } } my $thread0 = threads -> create ("funcao", "thread_0"); # Cria thread 1. my $thread1 = threads -> create ("funcao", "thread_1"); # Cria thread 2. my $thread2 = threads -> create ("funcao", "thread_2"); # Cria thread 3. print "\nThreads created!\n"; while (1) { sleep 2; } # Loop infinito. |=[ 0x0e - Orientação a Objetos (POO) ]=-----------------------------------------------------------=| Enfim, chegamos a orientação a objetos na linguagem Perl. Como você pode notar, aqui no paper procurei não falar muito de teoria e procurar dar mais exemplos práticos, e o mesmo vai se aplicar a OOP aqui em Perl. Eu particularmente prefiro uma linguagem de programação estruturada, Perl é uma linguagem muito flexivel, com ela você pode programar tanto com OOP (Object-oriented programming) ou sem. Mas como o texto tem que ser um pouco decente, tenho a obrigação de falar sobre OOP aqui. Caso não tem conhecimento algum sobre OOP, pesquise no Google, leia links para que compreenda a lógica. Segue abaixo o código de uma classe simples, com alguns métodos, o código está todo comentado. #!/usr/bin/perl # Define classe. package classe; { # Atributos da classe. my $attributes = { nome => undef, idade => undef }; # Construtor da classe. sub new { my ($instance, $nome) = @_; $attributes -> {nome} = $nome; bless $attributes, $instance; return $attributes; } # Método 'set_idade'. sub set_idade { my ($this, $idade) = @_; $this -> {idade} = $idade; } # Método 'show'. sub show { my ($this) = @_; print "\n". $this -> {nome} .' tem '. $this -> {idade} ." anos de idade.\n"; } } # Instancia objeto. my $obj = new classe ( 'Constantine' ); $obj -> set_idade ('20'); $obj -> show; # Exibindo dados de atributo de uma classe fora do objeto da mesma. print "test if variable is public: \"". $attributes -> {nome} . "\"\n\n"; |=[ 0x0f - Finalização e agradecimentos ]=---------------------------------------------------------=| Muito obrigado se você leu esse texto até aqui, espero ter ajudado em algo, o texto é muito superficial então recomendo que vá no Google e baixe alguns livros e/ou apostilas da linguagem Perl, pois ela realmente é muito interessante e bem flexivel. Und3rgr0undz f0r3v3r. +-+ EOF +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+