Tutorial Perl: Variável, Array, Hashes com Exemplo de Programação
O que é Perl?
Perl é uma linguagem de programação dinâmica, interpretada e de alto nível, de uso geral. Perl é um termo que significa “Practical Extraction and Reporting Language”, embora não exista um acrônimo para Perl. Foi introduzido por Larry Wall em 1987. A linguagem Perl foi especialmente projetada para edição de texto. Mas agora é amplamente utilizado para diversos fins, incluindo administração de sistemas Linux, programação de rede, desenvolvimento web, etc.
Vamos colocar isso de uma maneira simples. Embora os computadores entendam apenas 0 e 1 (linguagem binária/linguagem de máquina/[linguagem de baixo nível]), é muito difícil programar em uma linguagem binária para nós, humanos. Perl é uma linguagem de programação que utiliza elementos de linguagem natural, palavras que são usadas na língua inglesa comum e é, portanto, mais fácil de entender pelos humanos [linguagem de alto nível]. Agora há um problema; os computadores não conseguem compreender linguagens de alto nível, que nós, humanos, podemos compreender facilmente. Para isso, precisamos de algo que possa traduzir a linguagem de alto nível para a linguagem de baixo nível. Aqui o intérprete vem em nosso auxílio. O intérprete é um software que converte o programa escrito em linguagem de alto nível em linguagem de baixo nível para que o computador entenda e execute as instruções escritas no programa. Portanto, Perl é um linguagem de programação interpretada.
Onde o Perl é usado?
O poder da linguagem de script Perl pode ser implementado em muitos campos. O uso mais popular do Perl é no desenvolvimento da Web. Perl também é usado para automatizar muitas tarefas nos servidores da Web e outros trabalhos de administração, ele pode gerar e-mails automaticamente e limpar sistemas. Perl ainda é usado para seu propósito original, ou seja, extrair dados e gerar relatórios. Ele pode produzir relatórios sobre o uso de recursos e verificar problemas de segurança em uma rede. Por esse motivo, Perl se tornou uma linguagem popular usada também em desenvolvimento web, redes e bioinformática. Além de tudo isso, Perl também pode ser usado para programação CGI.
Perl também pode ser utilizado para criação e manipulação de imagens. Além da rede via telnet, FTP, etc., criação de interface gráfica de usuário, eletrônica VLSI e criação de filtros de e-mail para reduzir práticas de spam são alguns casos de uso de Perl.
Perl também é conhecido pela implementação de práticas de POO (programação orientada a objetos) e suporta todas as formas de herança (simples, múltipla e diamante), polimorfismo e encapsulamento. Perl é flexível o suficiente para suportar práticas Procedural e POO simultaneamente. Perl também tem módulos extras que permitem que você escreva ou use/reutilize código escrito em Python, PHP, PDL, TCL, Oitava, Java,C, C++, Basic, Ruby e Lua em seu script Perl. Isso significa que você pode combinar Perl com esses recursos extras linguagens de programação em vez disso, reescrever o código existente.
Por que usar Perl?
É verdade que existem outras linguagens de programação que podem ser usadas para fazer todas as coisas mencionadas acima, então por que você deveria usar Perl especificamente? Perl é muito fácil de aprender, especialmente se você tiver experiência em programação de computadores. Perl foi projetado para ser fácil de ser escrito e compreendido por humanos, em vez de facilitar o processamento por computadores. Ele usa expressões regulares. Seu estilo natural de linguagem é diferente de outras linguagens de programação que usam gramática e sintaxe específicas; portanto, Perl é muito flexível e não impõe nenhuma maneira específica de pensar em uma solução ou problema. Perl é extremamente portátil. Ele pode rodar em qualquer sistema operacional que tenha o interpretador Perl instalado, então é independente de plataforma. Todos Linux OperaOs sistemas ting vêm instalados com Perl, então você pode começar a codificação Perl no Linux imediatamente. Isso é diferente dos scripts Shell, onde o código muda com o sabor da distribuição Linux que está sendo usada, tornando-o cada vez menos portátil Pequenas tarefas específicas em Perl tornam-se muito fáceis e rápidas. Ao longo deste tutorial Perl para iniciantes, você aprenderá como codificar programas pequenos e rápidos para tarefas específicas. Vejamos um exemplo simples do clássico programa Hello World, usado para começar a aprender qualquer linguagem de programação que tenha UNIX como raiz:
Exemplo: Perl olá mundo
#!/usr/bin/perl print "Hello, world!";
Saída:
Olá mundo!
As duas linhas de código acima imprimirão Hello, world! Agora não foi muito simples e rápido? Alunos com conhecimento de C, C++ saberá que são necessárias muito mais linhas de código para obter a mesma saída nessas linguagens.
Você pode estar se perguntando por que Perl é tão famoso na Web. É simples porque a maioria das coisas que acontecem na web são de TEXTO e Perl é muito bom em processamento de texto. Se compararmos Perl com qualquer uma das linguagens, então Perl será a melhor linguagem, boa no manuseio de arquivos, processamento de texto e relatórios de saída
Uma das melhores vantagens do Perl é que ele é podem ser utilizados gratuitamente.
A comunidade Perl acredita firmemente que o software deve estar disponível gratuitamente, ser livremente modificável e livremente distribuível. Vários voluntários da comunidade Perl se esforçam para tornar a linguagem de programação a melhor possível.
Vantagens e desvantagens do Perl
Prós: | Contras: |
---|---|
|
|
Vamos começar
Com conhecimento suficiente sobre a história do Perl e os conceitos básicos de programação de computadores necessários para a codificação em Perl, é hora de mergulharmos e começarmos a usar o Perl. O próximo capítulo ensinará como você pode configurar o Perl em seu sistema e se preparar para a jornada de codificação em Perl. Este tutorial de script Perl usará o Linux como o sistema operacional que os alunos usarão para codificação em Perl.
Baixe e instale Perl – Windows, Mac e Linux
Como obter Perl?
Boas notícias você provavelmente tem!
Mas se você ainda não conseguir encontrá-lo em seu sistema, ainda poderá obtê-lo gratuitamente.
Para descobrir se você já possui o Perl instalado, entre na linha de comando e digite: perl -v
O comando exibirá a versão do Perl se estiver instalado. Neste caso, a versão é v5.14.2. Mas se não… não entre em pânico…
Unix | Já instalado Vem pré-instalado com Perl, embora possa ser necessário atualizar para a versão mais recente. |
Mac OS | Já instalado OSX vem com Perl pré-instalado, embora possa ser necessário atualizá-lo para a versão mais recente |
Windows | Precisa instalar Duas opções estão disponíveis
|
Atualizando Perl no Linux:
Se você precisar atualizar a versão Perl, basta digitar uma única linha de comando
sudo apt-get install perl
e relaxe. O resto será resolvido. Apenas certifique-se de ter uma conexão ativa com a Internet.
Instalar perl para Windows:
Primeiro, baixe o Active Perl deste link. Siga estas etapas para instalar o ActivePerl em Windows sistema. Veja as capturas de tela abaixo para o mesmo.
- Depois de baixar o instalador e iniciar a instalação você verá a janela abaixo, clique em próximo para prosseguir.
- Aceite o contrato de licença para prosseguir com a instalação.
- Abaixo estão os diferentes pacotes que serão instalados. Por padrão, todos estarão selecionados. A única coisa diferente é o PPM (Perl Package Manager). Este é o utilitário fornecido pelo Active Perl para instalar módulos ou bibliotecas Perl externas em seu sistema. Clique em Próximo para prosseguir.
- Estes são diferentes tipos de extensões Perl que podem ser usadas para Perl. Usaremos principalmente .Pl, .Plx e .Pm para Perl. Os módulos Perl basicamente usam .Pm como extensão de arquivo para se referir a um arquivo de biblioteca. Selecione todas as opções e clique no botão Avançar.
- Clique no botão Instalar para prosseguir com a instalação.
- Uma vez instalado, execute o comando 'Perl –v' para verificar se o Perl foi instalado com sucesso em seu sistema.
Há muitas coisas que precisam ser discutidas para configurar o ambiente Perl tanto no Linux quanto no Windows, pois não haverá muitos arquivos de biblioteca incluídos nesta instalação. Você precisa instalá-los manualmente. Você pode instalá-los manualmente usando CPAN(Comprehensive Perl Archive Network) ou PPM que funciona somente para janelas perl. Mas esses arquivos não são obrigatórios para começar a codificar em Perl.
Além desta configuração do Windows, você pode usar Windows Novo recurso do subsistema Linux do Windows 10 e uso para executar código Perl
Primeiro programa Perl
Hello world!
Exemplo Perl: Olá Mundo
#!/usr/bin/perl -w #this is just a comment… print "Hello World";
Não se preocupe se você não entender este texto. Tudo ficará claro em breve. Venha e dê uma olhada por linha:
#!/usr/bin/perl
Isso diz ao Operating System para executar este arquivo com o programa localizado em /usr/bin/perl Alguns IDEs não precisam desta linha. Se for essencial, você deve escrever aqui um caminho para o seu intérprete. Lembrar! Esta linha especial deve estar no início do seu programa e deve começar em #! usar avisos; Este é outro comando especial que diz ao intérprete para exibir quaisquer avisos, ou seja, -w que ativa avisos globalmente.
print "Hello World";
A instrução de impressão escreve texto na tela. O ponto e vírgula no final da linha informa ao interpretador Perl que a instrução foi concluída. Você deve colocar um ponto e vírgula no final de cada instrução no código Perl. Observe as aspas (“). É necessário para instruções de impressão. Salve o script acima como firstprog.pl
On Windows
Se você tiver o Strawberry instalado, basta clicar em Executar. Você também pode executar a interface de linha de comando e escrever no console:
C:\> perl path\firstprog.pl
ou, se perl.exe não estiver no seu caminho:
C:\> c:\perl\bin\perl.exe firstprog.pl
No Linux/Unix
Basta abrir o Terminal e escrever:
perl firstprog.pl
Se você não conseguir executar o programa, certifique-se de ter elegibilidade para executá-lo. Digite no Terminal:
chmod +x firstprog.pl
Seu programa agora é executável e pronto para ser executado. Para executar, escreva:
./firstprog
Instale módulos cpan menos
Módulos são conjuntos de códigos usados para realizar tarefas que realizam operações comuns em diversos programas. Se você usar módulos Perl, não será necessário reescrever os códigos para realizar a mesma operação. Perl pode fazer uso de tais bibliotecas externas de códigos. Uma das melhores bibliotecas é a CPAN. Significa Perl abrangente Archive Network e contém uma grande quantidade de módulos Perl para você usar. É uma comunidade ou rede de um grande número de desenvolvedores que contribuem com esses módulos. Ao instalar o suporte para módulos CPAN em seu módulo perl, você pode usar os módulos CPAN e facilitar seu trabalho. A maioria dos módulos Perl são escritos em Perl, alguns usam XS (eles são escritos em C), então requerem um compilador C (é fácil obter essa configuração – não entre em pânico. Os módulos podem ter dependências de outros módulos (quase sempre no CPAN) e não podem ser instalados sem eles (ou sem uma versão específica deles). Vale a pena ler atentamente a documentação para as opções abaixo. Muitos módulos no CPAN agora exigem uma versão recente do Perl (versão 5.8 ou superior). Instale cpanminus, um script para obter, descompactar, construir e instalar módulos do CPAN para facilitar a instalação de outros módulos (você nos agradecerá mais tarde). Para instalar App-cpanminus módulos perl, na linha de comando digite:
cpan App::cpanminus
cpan App::cpanminus Certifique-se de ter conexão com a internet enquanto os módulos perl estão sendo baixados e instalados.
Agora instale qualquer módulo:
cpan –i <Module_Name>.
Vejamos um exemplo de instalação de um módulo File::Data(É uma interface para acessar os dados do arquivo).
Variável Perl
Agora falaremos sobre variáveis. Você pode imaginar uma variável como um tipo de contêiner que contém um ou mais valores. Uma vez definido, o nome da variável permanece o mesmo, mas o valor ou valores mudam continuamente.
Existem 3 tipos de variáveis:
Os mais fáceis são os escalares, e este é o nosso assunto de hoje
Variável escalar
Este tipo de variável contém um único valor.
Seu nome começa com um cifrão e um identificador Perl (é o nome da nossa variável).
Convenção de nomes
Se você estiver familiarizado com outras linguagens de programação, saberá que existem certas regras sobre como nomear variáveis. Da mesma forma, Perl tem três regras para nomear escalares.
- Todos os nomes escalares começarão com $. É fácil lembrar de prefixar cada nome com $. Pense nisso como um $ escalar.
- Como PHP. após o primeiro caracter $, que é especial em Perl, caracteres alfanuméricos, ou seja, de a a z, de A a Z e de 0 a 9 são permitidos. O caractere sublinhado também é permitido. Use sublinhado para dividir os nomes das variáveis em duas palavras. 'Mas o primeiro caractere não pode ser um número'
- Embora os números possam fazer parte do nome, eles não podem vir imediatamente depois de $. Isso implica que o primeiro caractere depois de $ será um alfabeto ou o sublinhado. Aqueles que vêm de C/C++ experiência deve ser imediatamente capaz de reconhecer a semelhança. Exemplos
Exemplo Perl:
$var; $Var32; $vaRRR43; $name_underscore_23;
Estes, no entanto, não são nomes legais de variáveis escalares.
mohohoh # $ character is missing $ # must be at least one letter $47x # second character must be a letter $variable! # you can't have a ! in a variable name
A regra geral diz que quando Perl tem apenas um de alguma coisa, isso é um escalar. Os escalares podem ser lidos em dispositivos e podemos usá-los em nossos programas.
Dois tipos de dados escalares
- Numbers
- Cordas
Numbers:
Neste tipo de dados escalares poderíamos especificar:
- inteiros, simplesmente são números inteiros, como 2, 0, 534
- números de ponto flutuante, são números reais, como 3.14, 6.74, 0.333
Aviso: Em geral, o interpretador Perl vê números inteiros como números de pontos flutuantes. Por exemplo, se você escrever 2 em seus programas, Perl verá como 2.0000
Literais inteiros:
Consiste em um ou mais dígitos, opcionalmente precedidos por mais ou menos e contendo sublinhados.
Exemplos Perl:
0; -2542; 4865415484645 #this also can be written with underscores (for clarity) : 4_865_415_484_645
Como você pode ver, não é nada de especial. Mas acredite, este é o tipo mais comum de escalares. Eles estão por toda parte.
Literais de ponto flutuante:
Consiste em dígitos, opcionalmente menos, ponto decimal e expoente.
Exemplos Perl:
3.14; 255.000; 3.6e20; # it's 3.6 times 10 to the 20th -3.6e20; # same as above, but negative -3.6e-20; #it's negative 3.6 times 10 to the -20th -3.6E-20; #we also can use E – this means the same the lowercase version -3.6e-20
Representação octal, hexadecimal e binária:
É uma alternativa ao sistema decimal. Permita-me mostrar a representação octal, hexadecimal e binária. Uma pequena tabela apresenta todas as informações importantes sobre esses estilos estranhos:
Representação | Base | Prosseguido por |
---|---|---|
Octal | 8 | 0 (zero) |
Hexadecimal | 16 | 0x |
Binário | 2 | 0b |
Exemplos Perl:
255; # 255 in decimal notation 0377; # 255 in octal notation 0xff; # 255 in hexadecimal notation 0b11111111; # 255 in binary notation
Todos esses valores para Perl significam o mesmo. Perl não armazena os valores no mesmo formato. Ele converterá internamente esses valores hexadecimais, binários e octais em decimais.
A atribuição é a operação mais comum em um escalar e é muito simples. Perl usa esse sinal de igual. Ele pega um valor da expressão do lado direito e coloca esse valor em nossa variável.
Vejamos exemplos:
$size=15; # give $size value of 15 $y = -7.78; # give $y value of -7.78
Além do mais, você pode colocar na variável não apenas um número, mas também uma expressão.
$z = 6 + 12 # give $z value of 18
Cordas
Strings: também é um tipo de escalar muito simples.
O comprimento máximo de uma string em Perl depende da quantidade de memória que o computador possui. Não há limite para o tamanho da string, qualquer quantidade de caracteres, símbolos ou palavras pode compor suas strings. A string mais curta não possui caracteres. O mais longo pode preencher toda a memória do sistema. Os programas Perl podem ser escritos inteiramente em conjunto de caracteres ASCII de 7 bits. Perl também permite que você adicione qualquer conjunto de caracteres de 8 ou 16 bits, também conhecido como. caracteres não ASCII em literais de string. Perl também adicionou suporte para Unicode UTF-8.
Assim como os números, existem dois tipos diferentes de strings:
- Literais de string com aspas simples
- Double cita literais de string
Literais de string entre aspas simples
Aspas simples são usadas para incluir dados que você deseja que sejam interpretados literalmente. Um pequeno exemplo e tudo deve ficar claro:
Exemplos Perl:
#!/usr/bin/perl $num = 7; $txt = 'it is $num'; print $txt;
Saída:
é $num
Aqui, devido ao valor de aspas simples de $num não ser utilizado e os caracteres literais '$','n', 'u' e 'm' são adicionados ao valor de $txt
Double- literais de string entre aspas
Double aspas são usadas para incluir dados que precisam ser interpolados antes do processamento. Isso significa que caracteres de escape e variáveis não são simplesmente inseridos literalmente em operações posteriores, mas são avaliados no local. Caracteres de escape podem ser usados para inserir novas linhas, tabulações, etc.
Exemplos Perl:
$num = 7; $txt = "it is $num"; print $txt;
Saída:
é 7
Aqui, devido às aspas duplas, o valor de $num é adicionado ao valor de $txt
Double-quotes interpola variáveis escalares e de array, mas não hashes. Por outro lado, você pode usar aspas duplas para interpolar fatias de arrays e hashes.
Misterioso \n
Considere o seguinte programa
Exemplos Perl:
print "hello \n";
Saída:
Olá
Perl não exibe apenas 'hello\n', mas apenas 'hello'. Por que? Porque '\n' é um sinal especial e significa que você deseja ir para uma nova linha enquanto exibe o texto em seu programa. imprima “olá\n nova linha”; Próxima pergunta: há algum outro sinal especial? Sim, eles estão! Mas não se preocupe, apenas alguns. Confira a tabela abaixo
Construir | Descrição |
---|---|
\n | nova linha |
\r | retorno |
\t | aba |
\f | alimentação de formulário |
\b | retrocesso |
\a | sino |
\e | escapar |
\ 007 | qualquer valor ASCII octal (aqui, 007 = sino) |
\x7f | qualquer valor hexadecimal (aqui, 7f = excluir) |
\\ | barra invertida |
\ ” | citação dupla |
\l | próxima letra minúscula |
\L | todas as letras seguintes em minúsculas até \E |
\u | próxima letra maiúscula |
\U | todas as letras seguintes em maiúsculas até \E |
\E | Terminar \L, \U |
Eu sei, não existem 'só alguns'... Mas acredite, você precisa saber apenas
Variável de sequência de caracteres
É a mesma operação que vemos na atribuição de números. Perl obtém nossa string do lado direito do sinal de igual e coloca essa string em uma variável.
Exemplos Perl:
$string = 'tutorial'; # give $string the eight-character string 'tutorial' print $string; $string = $size + 3 ; # give $string the current value of $size plus 3 print $string; $string = $ string * 5; # multiplied $string by 5 print $string;
Saída:
tutorial 315
Como você pode ver, você pode colocar números e strings nas mesmas variáveis. Não há classe de variáveis.
Concatenação de strings (ponto final):
O operador de concatenação “.” une duas ou mais cordas. Lembrar! Se a string contiver aspas, retornos de carro, barras invertidas, todos esses caracteres especiais precisarão ser escapados com uma barra invertida.
Exemplos de variáveis Perl ' ':
#!/usr/bin/perl $a = "Tom is"; $b = "favorite cat"; $c = $a ." mother's ". $b; print $c;
Saída:
Tom é o gato favorito da mãe
As cordas
“$a”, “$b”, é concatenado e armazenado em “$c” usando “.” operador.
No final…
Conversão entre Numbers e cordas:
Como você sabe, Perl converte automaticamente números em string conforme necessário. Como Perl sabe o que precisamos agora? Isto é simples - tudo depende do operador (falaremos sobre operadores mais tarde, agora, apenas aceite que existem muitos operadores, diferentes para números e strings). Se um operador espera um número, Perl usará o valor como um número . Se um operador espera uma string, Perl usará o valor como uma string. Em outras palavras, você não precisa se preocupar com esse tipo de conversão. Pequeno exemplo e tudo deve ficar claro:
Exemplos Perl:
$string = "43"; $number = 28; $result = $string + $number; print $result;
Saída:
71
o valor de $string é convertido em um número inteiro e adicionado ao valor de $number.
O resultado da adição, 71, é atribuído a $resultado.
Escopo de uma variável – modificadores de acesso
Podemos declarar um escalar em qualquer lugar do programa. Mas você precisa especificar um modificador de acesso
Existem 3 tipos de modificadores
- my
- local
- A Nossa
Meu: Usando isto você pode declarar qualquer variável específica dentro do bloco. ou seja, entre chaves.
#!/usr/bin/perl my $var=5; if(1) { my $var_2 =$var; } print $var_2;
Sem saída
A saída do programa não será nada!
No exemplo acima, você verá que existem duas variáveis declaradas, uma está dentro do bloco if ($var_2) e a outra está fora do bloco If ($var). A variável declarada fora do bloco será acessível ao bloco if, mas a variável que foi declarada dentro do bloco if não estará acessível ao programa externo.
Local: Usando isso, podemos realmente mascarar os mesmos valores de variáveis para valores diferentes sem realmente alterar o valor original da variável, suponha que temos uma variável $a para a qual o valor é atribuído 5, você pode realmente alterar o valor dessa variável por redeclarar a mesma variável usando a palavra-chave local sem alterar o valor original da variável que é 5. Vamos ver como isso funciona com um exemplo.
#!/usr/bin/perl $var = 5; { local $var = 3; print "local,\$var = $var \n"; } print "global,\$var = $var \n";
A saída do programa acima será desta maneira.
local, $ var = 3
global, $ var = 5
Desta forma podemos alterar o valor da variável sem afetar o valor original.
Our: Uma vez que uma variável é declarada com o modificador de acesso “our”, ela pode ser usada em todo o pacote. Suponha que você tenha um módulo Perl ou um pacote test.pm que possui uma variável declarada com escopo our. Esta variável pode ser acessada em qualquer script que utilize esse pacote.
Se você leva a sério a programação em Perl, você deve começar seu programa com
#! / usr / local / bin / perl
use estrito;
Isso o ajudará a escrever um código melhor e mais limpo. 'use strict' ativa o pragma estrito que fará com que você declare suas variáveis com minha palavra-chave.
Esta é uma boa prática de programação
#!/usr/local/bin/perl use strict; $var = 10; print "$var";
Resultado: Erro
#!/usr/local/bin/perl use strict; my $var = 10; print "$var";
Saída:
10
Matriz Perl
O que é matriz Perl?
Um Array é um tipo especial de variável que armazena dados na forma de uma lista; cada elemento pode ser acessado usando o número de índice que será exclusivo para cada elemento. Você pode armazenar números, strings, valores flutuantes, etc. em seu array. Isso parece ótimo. Então, como criamos um array em Perl? Em Perl, você pode definir um array usando o caractere '@' seguido do nome que deseja fornecer. Vamos considerar a definição de um array em Perl.
meu @array;
É assim que definimos um array em Perl; você pode estar pensando em como precisamos armazenar dados nele. Existem diferentes maneiras de armazenar dados em um array. Isso depende de como você vai usá-lo.
my @array=(a,b,c,d); print @array;
Saída:
ABCD
Este é um array com 4 elementos.
O índice do array começa em 0 e termina no tamanho máximo declarado; neste caso, o tamanho máximo do índice é 3.
Você também pode declarar um array da maneira acima; a única diferença é que ele armazena dados em um array considerando um espaço em branco como delimitador. Aqui, qw() significa palavra de citação. O significado desta função é gerar uma lista de palavras. Você pode usar o qw de várias maneiras para declarar um array.
@array1=qw/a b c d/; @array2= qw' p q r s'; @array3=qw { v x y z}; print @array1; print @array2; print @array3;
Saída:
abcdpqrsvxyz
Suponha que você queira atribuir um valor ao 5th elemento de um array, como vamos fazer isso.
$matriz[4] ='e';
Matriz Sequencial
Matrizes sequenciais são aquelas onde você armazena dados sequencialmente. Suponha que você queira armazenar de 1 a 10 números ou alfabetos az em uma matriz. Em vez de digitar todas as letras, você pode tentar algo como abaixo –
@numbers= (1..10); print @numbers; #Prints numbers from 1 to 10;
Saída:
12345678910
Tamanho da matriz Perl
Temos um array que já está disponível e você não sabe qual é o tamanho desse array, então qual é a maneira possível de encontrá-lo.
@array= qw/a b c d e/; print $size=scalar (@array);
Podemos obter o tamanho de um array sem usar funções? Sim, nós podemos.
@array= qw/a b c d e/; print $size=scalar (@array); print "\n"; print $size=$#array + 1; # $#array will print the Max Index of the array, which is 5 in this case
Saída:
5
5
Matriz Dinâmica
O método acima para declarar um array é chamado matrizes estáticas, onde você sabe o tamanho de um array.
O que é matriz dinâmica?
Matrizes dinâmicas são aquelas que você declara sem especificar nenhum valor nelas. Então, quando exatamente armazenamos valores nesse array? Simples, nós os armazenamos durante o tempo de execução. Aqui está um programa simples para isso.
Estaremos usando algumas funções Perl integradas para realizar esta tarefa.
my $string="This is a kind of dynamic array"; my @array; @array=split('a',$string); foreach(@array) { print "$_ \n”; # This is a special variable which stores the current value. }
Saída:
Isto é
tipo de dinheiro
mic
rr
y
A função split divide o conteúdo da string em um array com base no delimitador fornecido a ela. Esta função também eliminará o delimitador da string, neste caso é 'a';
Push, Pop, shift, unshift para matrizes Perl:
Essas funções podem ser usadas em Perl para adicionar/excluir elementos do array.
- Perl Push: adiciona um elemento de array no final de um array existente.
- Perl Pop: remove o último elemento de um array.
- Perl Shift: remove o primeiro elemento de um array.
- Perl Unshift: adiciona um elemento no início de um array.
Vejamos um exemplo onde podemos usar as funções abaixo.
@days = ("Mon","Tue","Wed"); print "1st : @days\n"; push(@days, "Thu"); # adds one element at the end of an array print "2nd when push : @days\n"; unshift(@days, "Fri"); # adds one element at the beginning of an array print "3rd when unshift : @days\n"; pop(@days); print "4th when pop : @days\n"; # remove one element from the last of an array. shift(@days); # remove one element from the beginning of an array. print "5th when shift : @days\n";
Saída:
1º: Seg Ter Qua
2º quando push: Seg Ter Qua Qui
3º quando sem turno: Sex Seg Ter Qua Qui
4º quando pop: Sex Seg Ter Qua
5º turno: Seg Ter Qua
Hashes Perl
Por que precisamos de Hash?
Já aprendemos sobre escalares e arrays nas seções anteriores.
O que exatamente os escalares fazem? Ele armazena apenas números inteiros e strings.
O que exatamente os arrays fazem? É uma coleção de escalares, onde você acessa cada elemento de um array usando índices. Mas será uma boa ideia usar um array quando você tem centenas e milhares de registros? Esqueceremos qual índice tem qual valor. Para superar esta situação temos algo como perl hash.
O que são hashes?
Um hash também pode conter tantos escalares quanto o array puder conter. A única diferença é que não temos nenhum índice, mas sim chaves e valores. Um hash pode ser declarado, começando com% seguido do nome do hash. Vamos ver um exemplo de como podemos definir um hash Perl e como podemos diferenciá-lo de um array
Considere um exemplo de três pessoas e suas idades representadas em uma matriz.
@array=('Sainath',23,'Krishna',24,'Shruthi',25); #This is how an array looks. print @array;
Saída:
Sainath33Krishna24 Shruthi25
Dessa forma, é difícil saber as idades individuais, pois precisamos lembrar as localizações do nome e da idade de todas as pessoas. Pode ser simples quando você tem 3 nomes, mas quando você tem 1000 ou mais? Você sabe a resposta.
Isso podemos superar usando um hash.
Exemplo de hash:
print %hash=( 'Sainath' => 23, 'Krishna' => 24, 'Shruthi' => 25); # This is how we create a hash. print %hash=('Sainath',23,'Krishna',24,'Shruthi',25);# This way of assigning is called list.
Saída:
Sainath33Krishna24Shruthi25Sainath33Krishna24 Shruthi25
Agora declaramos um hash, ótimo!! Mas, como podemos acessá-lo ou imprimi-lo? Cada elemento do hash deve ser acessado com sua chave associada para a qual haverá um valor atribuído. Portanto, há um mapeamento individual entre cada chave e valor no hash.
Para imprimir a idade de qualquer pessoa, basta lembrar o nome dessa pessoa.
print $hash{'Krishna'}; # This how we should access a hash. Key enclosed within {}.
Você deve estar se perguntando por que usei $hash{KeyName}, lembre-se de que um hash é uma coleção de escalares novamente. Portanto, podemos usar $ que representa escalar para acessar cada elemento hash.
Nota: Cada chave no hash deve ser única ou substituirá o seu valor, que foi atribuído anteriormente.
Como podemos atribuir um hash a outro hash? Simples, da mesma forma que fazemos para
Também podemos imprimir o hash inteiro.
%hash=( 'Tom' => 23); %newHash=%hash; # Assigning hash to a new hashprint %newHash; print %newHash;
Saída:
Tom23
Adicionar hashes Perl
Como você pode ver, já temos um hash% newHash e agora precisamos adicionar mais entradas nele.
$newHash{'Jim'}=25; $newHash{'John'}=26; $newHash{'Harry'}=27; print %newHash;
Saída:
Jim25John26Harry27
Chave de exclusão Perl
Você pode querer excluir uma entrada de um hash. É assim que podemos fazer isso.
delete $newHash{'Jim'};#This will delete an entry from the hash.
Delete é uma função embutida do Perl. Aqui, veremos um exemplo de atribuição de um hash a um array.
@array=%newHash; print "@array";
Nota: Sempre que você imprime um hash ou armazena hash em um array. A ordem pode sempre ser diferente. Não é sempre a mesma coisa.
Podemos atribuir apenas chaves ou valores de um hash a um array.
@arraykeys= keys(%newHash); @arrayvalues=values(%newHash); print "@arraykeys\n"; print "@arrayvalues\n"; # \n to print new line.
Para remover todas as entradas do hash, podemos atribuir diretamente o hash a nulo.
%newHash=();# Isso redefinirá o hash sem entradas.
Declarações Condicionais Perl
Podemos usar instruções condicionais em Perl. Então, o que são declarações condicionais? Declarações condicionais são aquelas em que você realmente verifica algumas circunstâncias a serem satisfeitas em seu código.
Pense em um exemplo: você está comprando algumas frutas e não gosta que o preço seja superior a 100 dólares. Então, a regra aqui é 100 dólares.
Perl suporta dois tipos de instruções condicionais; eles são se e a menos que.
Perl se
Se o bloco de código será executado, quando a condição for verdadeira.
my $a=5; if($a==5) { print "The value is $a"; }
Saída:
5
Perl se mais
Este parece ser bom. Vamos pensar em uma situação em que $a não seja 5.
my $a=10; if($a==5) { print "The values is $a ---PASS"; } else { print "The value is $a ---FAIL"; }
Saída:
O valor é 10 —FALHA
Dessa forma, podemos controlar apenas uma condição por vez. É uma limitação? Não, você também pode controlar várias condições usando if… elsif… else.
Perl senão se
my $a=5; if($a==6) { print "Executed If block -- The value is $a"; } elsif($a==5) { print "Executed elsif block --The value is $a"; } else { print "Executed else block – The value is $a"; }
Saída:
Bloco elsif executado –O valor é 5
No caso acima, o bloco elsif será executado porque $a é igual a 5.
Pode haver situações em que os blocos de código if e elsif falharão. Neste cenário, o bloco de código else será executado. Na verdade, você pode eliminar a verificação de código else se não quiser incluir.
Perl aninhado se
Nesse caso, você pode usar o bloco de código if em mais um bloco de código if.
my $a=11; #Change values to 11,2,5 and observe output if($a<10){ print "Inside 1st if block"; if($a<5){ print "Inside 2nd if block --- The value is $a"; } else{ print " Inside 2nd else block --- The value is $a"; } } else{ print "Inside 1st else block – The value is $a"; }
Saída:
Dentro do primeiro bloco else – O valor é 1
Execute o mesmo código alterando o valor de $a; você pode descobrir o resto.
Perl a menos que
Você já tem uma ideia do que if faz (se a condição for verdadeira, ele executará o bloco de código). A menos que seja o oposto de if, a menos que o bloco de código seja executado se a condição for falsa.
my $a=5; unless($a==5) { print "Inside the unless block --- The value is $a"; } else { print "Inside else block--- The value is $a"; }
Saída:
Dentro do primeiro bloco else – O valor é 1
Adivinhe qual será o resultado. Você está certo!!!!!. A saída será a instrução print do bloco else. Por causa da condição em a menos que o bloco de código seja verdadeiro, lembre-se de que o bloco a menos será executado apenas se a condição for falsa. Altere o valor de $a e execute o código você verá a diferença.
Perl usando if
$a= " This is Perl"; if($a eq "SASSDSS"){ print "Inside If Block"; } else { print "Inside else block" }
Saída:
Dentro do outro bloco
Usando a menos que
$a= " This is Perl"; unless($a eq "SASSDSS"){ print "Inside unless Block"; } else { print "Inside else block" }
Saída:
Dentro, a menos que bloqueie
Perl Loops – Estruturas de Controle
Perl suporta estruturas de controle semelhantes a outras linguagens de programação. Perl suporta quatro tipos de estruturas de controle para, foreach, while e Until. Usamos essas instruções para executar algum código repetidamente.
Para loop Perl
Pois o bloco de código será executado até que a condição seja satisfeita. Vamos dar um exemplo de como fazer um loop Perl em um array.
my @array=(1..10); for(my $count=0;$count<10;$count++) { print "The array index $count value is $array[$count]"; print "\n"; }
Saída:
O valor do índice da matriz 0 é 1
O valor do índice da matriz 1 é 2
O valor do índice da matriz 2 é 3
O valor do índice da matriz 3 é 4
O valor do índice da matriz 4 é 5
O valor do índice da matriz 5 é 6
O valor do índice da matriz 6 é 7
O valor do índice da matriz 7 é 8
O valor do índice da matriz 8 é 9
O valor do índice da matriz 9 é 10
Aqui, na expressão for (), há muitas instruções incluídas. Existe um significado para cada um deles.
for (inicialização; condição; incremento)
Aqui está outra maneira de usar for.
for(1..10) { print "$_ n"; print "\n"; }
Saída:
1n
2n
3n
4n
5n
6n
7n
8n
9n
10n
Perl Foreach
A instrução for each pode ser usada da mesma maneira que for; a principal diferença é que não temos nenhuma verificação de condição e incremento nisso.
Vamos dar o mesmo exemplo com foreach perl.
my @array=(1..10); foreach my $value (@array) { print " The value is $value\n"; }
Saída:
O valor é 1
O valor é 2
O valor é 3
O valor é 4
O valor é 5
O valor é 6
O valor é 7
O valor é 8
O valor é 9
O valor é 10
Foreach pega cada elemento de um array e atribui esse valor a $var para cada iteração. Também podemos usar $_ para o mesmo.
my @array=(1..10); foreach(@array) { print " The value is $_ \n"; # This is same as the above code. }
Saída:
O valor é 1
O valor é 2
O valor é 3
O valor é 4
O valor é 5
O valor é 6
O valor é 7
O valor é 8
O valor é 9
O valor é 10
Isso parece bom para acessar arrays. E quanto aos Hashes, como podemos obter chaves e valores de hash usando foreach?
Podemos usar foreach para acessar chaves e valores do hash fazendo um loop nele.
my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25); foreach my $key (keys %hash) { print "$key \n"; }
Saída:
Mickey
Tom
Jerry
Você deve estar se perguntando: por que usamos chaves em foreach(). Keys é uma função embutida do Perl onde podemos acessar rapidamente as chaves do hash. E quanto aos valores? Podemos usar a função de valores para acessar os valores do hash.
my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25); foreach my $value(values %hash) # This will push each value of the key to $value { print " the value is $value \n"; }
Saída:
o valor é 24
o valor é 23
o valor é 25
Perl enquanto
O loop Perl While é uma estrutura de controle, onde o bloco de código será executado até que a condição seja verdadeira.
O bloco de código será encerrado somente se a condição for falsa.
Vamos dar um exemplo para o loop While do Perl.
Aqui está um problema que exigirá a entrada do usuário e não será encerrado até que o número fornecido seja '7'.
#!/usr/bin/perl $guru99 = 0; $luckynum = 7; print "Guess a Number Between 1 and 10\n"; $guru99 = <STDIN>; while ($guru99 != $luckynum) { print "Guess a Number Between 1 and 10 \n "; $guru99 = <STDIN>; } print "You guessed the lucky number 7"
Saída:
Adivinhe um número entre 1 e 10
9
Adivinhe um número entre 1 e 10
5
Adivinhe um número entre 1 e 10
7
Você adivinhou o número da sorte 7
No exemplo acima, a condição while não será verdadeira se inserirmos uma entrada diferente de '7'.
Se você ver como o while funciona aqui, o bloco de código será executado somente se a condição em um while for verdadeira.
Perl do-while
O loop Do while será executado pelo menos uma vez, mesmo se a condição na seção while for falsa.
Vamos dar o mesmo exemplo usando do while.
$guru99 = 10; do { print "$guru99 \n"; $guru99--; } while ($guru99 >= 1); print "Now value is less than 1";
Saída:
10
9
8
7
6
5
4
3
2
1
Agora o valor é menor que 1
Perl até
Até que o bloco de código seja semelhante a menos que em uma instrução condicional. Aqui, o bloco de código será executado somente se a condição no bloco até for falsa.
Tomemos o mesmo exemplo que usamos no caso de um tempo.
Aqui está um problema que exigirá a entrada do usuário e não será encerrado até que o nome fornecido seja diferente de 'sai'.
print "Enter any name \n"; my $name=<STDIN>; chomp($name); until($name ne 'sai') { print "Enter any name \n"; $name=<STDIN>; chomp($name); }
Saída:
Digite qualquer nome sai
Perl faça até:
Do Until pode ser usado apenas quando precisamos que uma condição seja falsa e deve ser executado pelo menos uma vez.
print "Enter any name \n"; my $name=<STDIN>; chomp($name); do { print "Enter any name \n"; $name=<STDIN>; chomp($name); }until($name ne 'sai');
Saída:
Digite qualquer nome Howard
Digite qualquer nome Sheldon
Digite qualquer nome sai
Execute códigos de exemplo while, do-while, Until e do-until para ver a diferença.
Perl Operator
O que é o Operator?
OperaOs operadores em linguagem de computador indicam uma ação que pode ser executada em algum conjunto de variáveis ou valores que o computador pode compreender. Perl incorporou a maioria dos Operaoperadores da linguagem C. Perl tem muitos operadores em comparação com outras linguagens de programação. OperaOs operadores são categorizados como operadores aritméticos, lógicos, relacionais e de atribuição.
Aritmética Operatores:
Operadores aritméticos são aqueles que podem ser usados para realizar algumas operações matemáticas básicas. Esses operadores aritméticos são operadores binários onde precisamos de dois argumentos para realizar uma operação básica. Também podemos utilizar operadores unários para outras operações básicas; você pode ver a diferença nos exemplos abaixo.
Operator | Descrição | Exemplo |
---|---|---|
+ |
Operação de adição usada para adicionar dois valores ou variáveis mantendo valores |
$x=5+6; # ou $y=6; $z=$x+$y; |
- |
Operador de subtração usado para subtrair dois valores ou variáveis que contêm valores |
$x=6-5; # ou $y=6; $z=$x-$y; |
* |
Operador de multiplicação usado para multiplicar dois valores ou variáveis que contêm valores |
$x=6*5; # ou $y=6; $z=$x*$y; |
/ |
Operador de divisão usado para dividir dois valores ou variáveis que contêm valores |
$x=36/6; # ou $y=6; $z=$x/$y; |
** |
O operador exponencial usado para fornecer o expoente e obter o valor. Ex: 22 = 43 = 27 |
$x=5**5; # ou $x=4; $y=2; $z=$x**$y; |
% |
Operador de módulo usado para obter o lembrete durante a divisão de dois valores ou variáveis que contêm valores |
$x=5%2; # ou $x=10; $y=2; $z=$x % $y; |
++ |
Operador de adição unário para incrementar o valor de uma variável em 1 |
$x=5; $ x ++; Or ++$x; |
- |
Operador de subtração unário para diminuir o valor de uma variável em 1 |
$x=5; $x–; # pós-decremento Or –$x;# pré decremento |
Exemplo para completar todas as operações acima.
my $x=10; my $y=2; my $z; $z=$x+$y; print ("Add of $x and $y is $z \n"); $z=$x-$y; print ("Sub of $x and $y is $z \n"); $z=$x*$y; print ("Mul of $x and $y is $z \n"); $z=$x/$y; print ("Div of $x and $y is $z \n"); $z=$x**$y; print ("Exp of $x and $y is $z \n"); $z=$x%$y; print ("Mod of $x and $y is $z \n");
Saída:
A soma de 10 e 2 é 12
Sub de 10 e 2 é 8
Mul de 10 e 2 é 20
Div de 10 e 2 é 5
Exp de 10 e 2 é 100
Mod de 10 e 2 é 0
Atribuição Operatores:
Os operadores de atribuição simplesmente atribuem valores às variáveis, mas há mais uma coisa que precisamos lembrar aqui: os operadores de atribuição também realizarão operações aritméticas e atribuirão o novo valor à mesma variável na qual a operação é executada.
Operator | Descrição | Exemplo |
---|---|---|
+= |
Operador de adição usado para adicionar e atribuir o valor à mesma variável |
$x=4; $x+=10; |
-= |
Operador de subtração usado para subtrair e atribuir o valor à mesma variável |
$x=4; $x-=10; |
*= |
Operador de multiplicação usado para adicionar e atribuir o valor à mesma variável |
$x=4; $x*=10; |
/= |
Operador de divisão usado para dividir e atribuir o valor à mesma variável |
$x=4; $x/=10; |
** = |
Operador exponencial usado para obter o expoente e atribuir o valor à mesma variável |
$x=4; $x**=10; |
%= |
Operador de módulo usado para obter um lembrete durante a divisão e atribuir o valor à mesma variável |
$x=10; $x%=4; |
Exemplo para completar todas as operações acima.
my $x=10; $x+=5; print("Add = $x\n"); $x-=5; print("Sub= $x\n"); $x*=5; print("Mul = $x\n"); $x/=5; print("Div = $x\n");
Saída:
Adicionar = 15
Sub = 10
Mul = 50
Div = 10
Lógico e Relacional Operatores:
Perl usa operadores lógicos para comparar números e strings. Na maioria das vezes, operadores lógicos são usados em declarações condicionais.
Operator | Descrição |
---|---|
==ou equação |
Operator usado para verificar se ambas as variáveis são iguais |
!=Ou não |
Operator usado para verificar se ambas as variáveis não são iguais |
> ou gt |
Operator usado para verificar se A é maior que B |
<ou lt |
Operator usado para verificar se A é menor que B |
>=ou ge |
Operator usado para verificar se A é maior ou igual a B |
<=ou le |
Operator usado para verificar se A é menor ou igual a B |
|| ou ou |
Operator usado para verificar se A ou B está mantendo valor |
&&ou e |
Operator usado para verificar se A e B estão mantendo valor |
Tomemos um exemplo onde podemos explicar todos os cenários.
my $x=5; my $y=5; if($x == $y){ print ("True -- equal $x and $y \n"); } else{ print ("False -- not equal $x and $y\n"); } $x=6; $y=7; if($x != $y){ print ("True -- not equal $x and $y\n"); } else{ print ("False -- equal $x and $y\n"); } if($y > $x){ print ("True -- $y greater than $x\n"); } else{ print ("False -- $y greater than $x\n"); } if($x < $y){ print ("True -- $x less than $y\n"); } else{ print ("False -- $x less than $y\n"); } if($x <= $y){ print ("True -- $x less than $y\n"); } else{ print ("False -- $x less than $y\n"); } if($y >= $x){ print ("True -- $y greater than $x\n"); } else{ print ("False -- $y greater than $x\n"); }
Saída:
Verdadeiro - igual a 5 e 5
Verdadeiro - diferente de 6 e 7
Verdadeiro — 7 maior que 6
Verdadeiro – 6 menos que 7
Verdadeiro – 6 menos que 7
Verdadeiro — 7 maior que 6
Você pode ver exemplos de operadores lógicos em seções posteriores.
Variáveis Especiais Perl
O que são variáveis especiais Perl?
Variáveis especiais em Perl são aquelas que possuem algum significado predefinido. Essas variáveis são indicadas com nomes reais ou símbolos de pontuação. Temos uma variável especial para todas as variáveis suportadas por Perl, como variáveis escalares especiais, variáveis especiais de array, variáveis especiais de hash. A maioria das variáveis especiais que usamos são escalares.
Quando queremos usar a variável especial com seu nome, temos que carregar um módulo Perl 'use English', para dizer explicitamente ao intérprete Perl que usaremos variáveis especiais usando seu nome.
Variáveis especiais escalares
Variável | Descrição |
---|---|
$_$ARG |
Esta é a variável padrão que armazena os valores atuais. |
$0 ou $PROGRAM_NAME |
Armazena o nome do arquivo do script Perl. |
$/ |
O separador de registro de entrada tem um valor padrão de '\n', que é um caractere de nova linha |
$. |
Contém o número da linha atual do arquivo que está sendo lido |
$, |
Separador de campo de saída, usado principalmente pela instrução print(). Por padrão, o valor disso é definido como 0, podemos alterar o valor desta variável. |
$\ |
Separador de registros de saída, o valor desta variável estará vazio; podemos atribuir qualquer valor a isso, que será usado pela instrução print() durante a impressão da saída. |
$# |
Esta variável é usada para formato de saída durante a impressão de números. |
$%$FORMAT_PAGE_NUMBER |
Manterá o número da página atual do arquivo lido. |
$=$FORMAT_LINES_PER_PAGE |
Manterá o comprimento atual da página do arquivo lido. |
$-$FORMAT_LINES_LEFT |
Mantém o valor do número de linhas restantes para imprimir na página. |
$~$FORMAT_NAME |
Nome do formato: mantém o formato da saída atualmente selecionada por padrão, o nome do identificador do arquivo. |
$^$FORMAT_TOP_NAME |
Contém o valor do formato do cabeçalho do manipulador de arquivo; por padrão, o valor será _TOP seguido pelo nome do identificador do arquivo. |
$|$OUTPUT_AUTOFLUSH |
O padrão é zero; isso é usado para liberar o buffer de saída após cada gravação() ou impressão(). |
$$ |
Manterá o número do processo em execução do interpretador Perl. |
$? |
Código de status: Pipe e chamada de sistema. O status de retorno do comando executado. |
$&$COMBINAÇÃO |
Usado em expressões regulares, conterá uma string da última correspondência de padrão bem-sucedida. |
$`$PRÉ-JOGO |
Usado em expressões regulares, manterá a string precedida pela última correspondência de padrão bem-sucedida. |
$'$POSTMATCH |
Usado em expressões regulares, conterá uma string seguida pela última correspondência de padrão bem-sucedida. |
$+$LAST_PAREN_MATCH |
Contém a string do último colchete que corresponde à última pesquisa de padrão. |
$ |
$ 1, $ 2, $ 3…. Mantém os valores do padrão combinados em ordem. |
$[ |
Primeiro índice: Array, uma substring. |
$] |
Uma versão do Perl. |
$” |
O separador usado para elementos da lista, por valor padrão, é um espaço em branco. |
$; |
Separador de subscrito usado em matrizes multidimensionais |
$! |
No contexto numérico, imprime o número do erro. No contexto de string, imprima o erro. |
$@ |
Manterá as informações de erro de sintaxe, usadas quando eval() for usado. |
$< |
Contém o UID real (ID do usuário) do processo que executa o script. |
$> |
Contém o UID efetivo do processo que executa o script. |
$( |
Contém o GID (ID do grupo) real do processo que executa o script. |
$) |
Contém o GID efetivo do processo que executa o script. |
$^D$DEPURAÇÃO |
Contém o valor atual dos sinalizadores de depuração. |
$ ^ C |
Mantém o valor atual do sinalizador quando a opção de linha de comando –c é usada. |
$^F |
O descritor máximo de arquivo do sistema, por valor padrão, é definido como 2 |
$^I$INPLACE_EDIT |
Mantém o valor da opção de linha de comando –i. |
$^ milhões |
O pool de memória especial pode ser usado quando o script Perl morre com um erro de falta de memória. |
$^O$OSNAME |
Operainformações do sistema são armazenadas. 'Linux' para sistemas Linux, 'mswin32' para Windows sistemas. |
$^T$BASETIME |
O tempo em que os scripts estão sendo executados em segundos. |
$^W$AVISO |
O valor atual da opção de linha de comando –w. Interruptor de aviso. |
$ARGV |
Nome do arquivo atual, quando <> é usado. |
Variáveis especiais de matriz:
Variável | Descrição |
---|---|
@INC |
Contém uma lista de caminhos, onde os módulos ou scripts da biblioteca Perl podem ser examinados durante a execução do script atual. Este @INC é usado por instruções use e require para procurar nesses caminhos os módulos da biblioteca. |
@ARGV |
Armazena os argumentos da linha de comando passados. |
@_ |
Utilizado em sub-rotinas, ao passar os parâmetros para as sub-rotinas. |
@F |
Este é o array no qual as linhas de entrada são armazenadas quando a divisão automática –a (a opção de linha de comando é usada). |
Variáveis especiais de hash:
Variável | Descrição |
---|---|
%INC |
O nome do arquivo serão as chaves; valores serão o caminho para esses arquivos. Usado por fazer, usar e exigir. |
% ENV |
Variáveis ambientais do sistema. |
%SIG |
Signalé manipulador. |
Expressão Regular Perl
O que é expressão regular?
A expressão regular Perl é forte o suficiente para combinar os padrões de string dentro de uma instrução ou grupo de instruções. Expressões regulares são usadas principalmente na análise de texto, correspondência de padrões e muito mais com base nos requisitos. Temos certos operadores, que são especialmente usados pela ligação de padrões de expressões regulares =~ e! ~. Esses são operadores de teste e atribuição.
Expressão Regular Operatoros
- Correspondência Perl - m//
- Substituto Perl – s///
- Perl Transliterado – tr ///
Antes de prosseguir, precisamos saber algumas coisas sobre expressões regulares; existem certas coisas como meta caracteres, curingas na sintaxe Perl Regex.
carbonizar | Significado |
---|---|
\ |
Especial ou cotação |
* |
Combine 0 ou mais caracteres |
+ |
Combine 1 ou mais caracteres |
? |
Combine 0 ou 1 caractere |
| |
Pode ser usado para combinar padrões alternativos |
() |
Usado para armazenar o padrão correspondente |
[] |
Conjunto de caracteres pode ser passado. Usado especificamente para números e alfabetos. |
{} |
Usado para fornecer o número de vezes que a partida pode ser realizada. |
^ |
Início da corda |
$ |
Fim da corda |
\w |
Usado para corresponder a um único caractere ou palavra que pode ser alfanumérico, incluindo “_” |
\W |
Corresponder a qualquer coisa que não seja alfanumérica |
\s |
Usado para combinar espaços em branco |
\S |
Combine qualquer coisa que não seja espaço em branco |
\d |
Combine os números. Não valores decimais e valores negativos |
\D |
Combine qualquer coisa que não seja números. |
\t |
Corresponder espaço de tabulação |
\n |
Corresponder nova linha |
Acima está o conjunto de caracteres que podem ser usados durante a correspondência de padrões.
Vejamos alguns exemplos.
Considere uma situação em que o usuário fornece alguma entrada durante a execução do script e queremos verificar se o usuário inseriu algum nome como entrada ou não. Temos que escrever uma sintaxe de expressão regular para extrair seu nome e imprimi-lo.
my $userinput="Guru99 Rocks"; if($userinput=~m/.*(Guru99).*/) { print "Found Pattern"; } else { print "unable to find the pattern"; }
Saída:
Padrão encontrado
Aqui, escrevemos a expressão regular como /.*(Guru99).*/.* corresponde a todos os caracteres em uma string. A '.' em perl regex match refere-se a qualquer caractere, incluindo espaço.
Vamos ver exatamente como podemos construir um Regex.
Considere um exemplo de uma sequência de múltiplas palavras e dígitos e símbolos especiais como este “Olá a todos, este é o meu número: +91-99298373639”;
Regex: /^\w+\s\w+\s\w+\s\w+\s\w+\s\w+\:\+\d+\-\d+/i
Espaço de palavras espaço de palavras espaço de palavras espaço de palavras espaço de palavras espaço de palavras caractere especial: espaço caractere especial+dígitos caractere especial –dígitos.
Correspondência Perl Operatoros
Os operadores de correspondência são usados para combinar uma string dentro de alguma instrução ou variável.
my $var="Hello this is perl"; if($var=~m/perl/) { print "true"; } else { print "False"; }
Saída:
verdadeiro
Este pequeno código imprimirá 'true', pois a correspondência do padrão Perl identifica a string em uma variável. Basicamente, Perl procura pelo texto fornecido em // em toda a string, mesmo que encontre em um lugar ele retornará 'true'. O padrão pode estar em qualquer lugar da variável. Podemos tentar substituir =~ por !~ para ver a diferença entre esses dois operadores.
Substituição Perl Operator
Este operador pode ser usado para pesquisar e substituir qualquer caractere por nulo ou algum outro caractere.
my $a="Hello how are you"; $a=~s/hello/cello/gi; print $a;
Saída:
violoncelo, como vai você
Nota: Na verdade, também podemos usar qualquer string de correspondência de padrões, como fizemos anteriormente neste operador de substituição. Aqui usamos 'gi', g-globalmente, i-ignore case.
Tradução Perl Operator
Isto é semelhante à Substituição, mas não usa nenhuma expressão regular Perl, em vez disso podemos passar diretamente o valor ou uma palavra que queremos substituir.
my $a="Hello how are you"; $a=~tr/hello/cello/; print $a;
Saída:
Olá vaca, você é
E/S de arquivo Perl
Perl foi projetado para manipular arquivos e operações de E/S de maneira eficaz. A principal vantagem do Perl está na análise e manipulação de arquivos. Existem muitas funções e operadores integrados usados durante a manipulação de arquivos em Perl.
Basicamente, as operações de arquivo executadas com Perl são feitas usando FILEHANDLE. Temos que definir este FILEHANDLE durante a abertura de um arquivo para leitura ou gravação.
Neste tutorial de script Perl, você aprenderá-
Perl Abrir arquivo
Podemos abrir um arquivo usando a função open() disponível em Perl.
open(FILEHANDLE, "filename or complete path of the file");
Agora que abrimos um arquivo, surge uma dúvida. É para ler ou escrever?
Arquivo de leitura Perl e arquivo de gravação Perl
Perl possui certos modos, que precisam ser usados para ler, escrever ou anexar um arquivo.
Read – open(my $fh,"<filename or complete path of the file"); Write – open(my $fh,">filename or complete path of the file"); Append – open(my $fh,">>filename or complete path of the file");
Alguns exemplos para ler um arquivo:
Considere que temos um arquivo perl com o nome file.txt e contém poucas linhas de texto. Precisamos abrir este arquivo e imprimi-lo.
open(FH,"<file.txt"); while(<FH>) # Looping the file contents using the FH as a filehandle. { print "$_"; } close FH;
or
open(FH,"<file.txt"); my @content=<FH>; # specifying the input of the array is FH. foreach(@content) { print "$_"; } close FH;
Isso imprimirá o conteúdo do arquivo na tela de saída.
Agora, escreveremos um programa para criar e gravar dados em um arquivo perl.
open(FH,">test.txt"); my $var=<>; print FH $var; close FH;
Isso gravará a entrada fornecida durante o tempo de execução e criará um arquivo test.txt que terá entrada.
A forma acima sempre tentará criar um arquivo chamado test.txt e gravará a entrada no arquivo; escreveremos o mesmo para anexar o arquivo.
open(FH,">>test.txt"); my $var=<>; print FH $var; close FH;
Modos | Descrição |
---|---|
< |
Leia |
+< |
Lê e escreve |
> |
Cria, grava e trunca |
+> |
Ler, escrever, criar e truncar |
>> |
Grava, anexa e cria |
+>> |
Ler, escrever, anexar e criar |
Agora precisamos ver como ler, escrever e anexar arquivos usando exemplos básicos.
Veremos mais alguns exemplos e outras funções que ajudam a entender mais sobre arquivos.
Conta Perl
Este método retornará a posição atual de FILEHANDLER em bytes, se especificado, caso contrário, considerará a última linha como a posição.
open(FH, "test.pl"); while(<FH>) { $a=tell FH; print "$a"; }
Busca Perl
A função Seek é semelhante à chamada de sistema fseek. Este método é usado para posicionar o ponteiro do arquivo em um local específico, especificando os bytes seguidos pelo início ou pelo final do ponteiro do arquivo.
seek FH, bytes, WHENCE;
WHENCE é a posição do ponteiro do arquivo para iniciar. Zero irá defini-lo desde o início do arquivo.
Exemplo: Deixe que input.txt contenha alguns dados como “Olá, este é o meu mundo”.
open FH, '+<','input.txt'; seek FH, 5, 0; # This will start reading data after 5 bytes. $/ = undef; $out = <FH>; print $out; close FH;
Saída:
este é o meu mundo
Desvincular Perl
Desvincular é usado para excluir o arquivo.
unlink("filename or complete file path");
Manipulação de diretórios:
Também podemos lidar com diretórios através dos quais podemos lidar com vários arquivos.
vamos ver como abrir um diretório. Podemos usar os métodos opendir e readdir.
opendir(DIR,"C:\\Program Files\\"); #DIR is the directory handler. while(readdir(DIR)) # loop through the output of readdir to print the directory contents. { print "$_\n"; } closedir(DIR); #used to close the directory handler.
or
opendir(DIR,"C:\\Program Files\\"); @content=readdir(DIR); foreach(@content) { print "$_\n"; } closedir(DIR);
Isso imprimirá todos os arquivos disponíveis nesse diretório.
Testes de arquivo Perl e seu significado
-r |
Para verificar se o arquivo/diretório pode ser lido pelo usuário/grupo atual |
-w |
Para verificar se o arquivo/diretório pode ser gravado pelo usuário/grupo atual |
-x |
Para verificar se o arquivo/diretório é executável pelo usuário/grupo atual |
-o |
Para verificar se o arquivo/diretório pertence ao usuário atual |
-R |
Para verificar se o arquivo/diretório pode ser lido por este usuário/grupo real |
-W |
Para verificar se o arquivo/diretório pode ser gravado por este usuário/grupo real |
-X |
Para verificar se o arquivo/diretório é executável por este usuário/grupo real |
-O |
Para verificar se o arquivo/diretório pertence a este usuário real |
-e |
Para verificar se o nome do arquivo/diretório existe |
-z |
Para verificar se o arquivo existe e tem tamanho zero (sempre falso para diretórios) |
-f |
Para verificar se Entry é um arquivo simples |
-d |
Para verificar se Entry é um diretório |
-l |
Para verificar se Entry é um link simbólico |
-S |
Para verificar se Entry é um soquete |
-p |
Para verificar se Entry é um pipe nomeado (um “FIFO”) |
-b |
Para verificar se Entry é um arquivo especial de bloco (como um disco montável) |
-c |
Para verificar se Entry é um arquivo de caractere especial (como um dispositivo de E/S) |
-u |
Para verificar se o arquivo ou diretório está setuid |
-g |
Para verificar se o arquivo ou diretório está setgid |
-k |
Para verificar se o arquivo ou diretório tem o sticky bit definido |
-t |
O identificador de arquivo fornecido é um TTY (como pela função do sistema isatty(), os nomes dos arquivos não podem ser testados por este teste) |
-T |
Para verificar se o arquivo se parece com um arquivo de “texto” |
-B |
Para verificar se o arquivo se parece com um arquivo “binário” |
-M |
Para verificar a idade de modificação (medida em dias) do arquivo |
-A |
Para verificar a idade de acesso (medida em dias) do arquivo |
-C |
Para verificar a idade de modificação do Inode (medida em dias) do arquivo |
Sub-rotina Perl
O que é subrotina?
Sub-rotinas são semelhantes às funções em outras linguagens de programação. Já usamos algumas funções integradas como print, chomp, chop, etc. Podemos escrever nossas próprias sub-rotinas em Perl. Estas sub-rotinas podem ser escritas em qualquer lugar do programa; é preferível colocar as sub-rotinas no início ou no final do código.
Exemplo de sub-rotinas
sub subroutine_name { Statements…; # this is how typical subroutines look like. }
Agora que sabemos escrever uma sub-rotina, como podemos acessá-la?
Precisamos acessar ou chamar uma sub-rotina usando o nome da sub-rotina prefixado com o símbolo '&'.
sub display { print "this is a subroutine"; } display(); # This is how we call a subroutine
Passando parâmetros Perl e argumentos Perl
Sub-rotinas ou funções perl são escritas para colocar o código reutilizável nelas. A maior parte do código reutilizável requer que parâmetros sejam passados para a sub-rotina. Aqui aprenderemos como podemos passar argumentos para a sub-rotina.
sub display { my $var=@_; # @_ is a special variable which stores the list of arguments passed. print "$var is the value passed"; } display(2,3,4); #this is how we need to pass the arguments.
Saída:
3 é o valor passado
@_ é uma variável de array especial que armazena os argumentos passados para as sub-rotinas.
Perl Shift
Também podemos usar a palavra-chave 'shift' que muda um parâmetro por vez para uma variável ou $_[0],$_[1]… que é um elemento individual do array @_
sub display { my $var=shift; print "$var is passed"; } display("hello");
Saída:
Olá, foi passado
Sub-rotinas são normalmente usadas em programação orientada a objetos e também em locais onde você pode ter mais código reutilizável para ser colocado.
A principal funcionalidade das sub-rotinas é realizar alguma tarefa e retornar o resultado do código reutilizável.
Podemos retornar um valor da sub-rotina usando a palavra-chave return.
sub add { my $a=shift; my $b=shift; return($a+$b); } my $result=add(5,6); print $result;
Saída:
11
$resultado conterá o valor de $a e $b somados.
Também podemos passar hashes e array diretamente para a sub-rotina.
sub hash { my %hash=@_; print %hash; } %value= ( 1=>'a', 2=>'b'); &hash(%value);
Saída:
1a2b
Também podemos retornar um hash ou um array.
sub hashArray { my %hash=@_; print "Inside Sub-routine"; print %hash; return(%hash); } %hash=(1=>'a', 2=>'b'); my(@ret)=hashArray(%hash); print "After Sub-routine call"; print @ret;
Saída:
Dentro da sub-rotina2b1aDepois da sub-rotina call2b1a
Formato Perl
Perl possui um mecanismo com o qual podemos gerar relatórios. Utilizando este recurso, podemos fazer relatórios exatamente da maneira que desejamos durante a impressão na tela Saída ou em um arquivo. Um formato simples pode ser escrito usando as funções printf ou sprintf disponíveis em Perl.
printf "%05d\n", 30;
Isso incluirá zeros à esquerda na frente do número 30 fazendo uma contagem total de dígitos até 5. O mesmo pode ser usado para sprintf.
sprintf "%05d\n", 30; # This will print the same as printf.
Usando printf e sprintf, podemos obter a maioria dos formatos Perl. No caso de relatórios, será difícil de implementar.
================================================== =========================
Nome Endereço Idade Telefone
================================================== =========================
Krishna Chennai 24 929309242
Shruthi Chennai 24 929309232
O exemplo acima é um exemplo de relatório que precisamos imprimir da mesma maneira em Perl. Isso pode ser conseguido usando perl printf e perl sprintf. Ele pode ser efetivamente implementado usando formato.
Um formato pode ser declarado da maneira abaixo.
format FORMATNAME=FORMATLIST.
Aqui, usaremos um método específico de gravação para imprimir os dados na tela de saída ou no arquivo.
Símbolo | Descrição |
---|---|
@ |
Usado para representar o início do titular do campo |
> |
Alinhamento correto do texto |
< |
Alinhamento à esquerda do texto |
| |
Alinhamento central |
# |
Numérico se vários # forem fornecidos. Assume como um comentário se o único # for fornecido |
. |
Ponto decimal |
^ |
O início do suporte de campo também pode ser usado para multilinhas e também para quebra de linha |
~ |
A linha deve estar vazia se a variável estiver vazia |
@* |
Várias linhas. |
($name,$addr,$age,$phone)=("krishna","chennai","24","929309242"); write; ($name,$addr,$age,$phone)=("shruthi","chennai","24","929309232"); write; format STDOUT_TOP= =============================================================== NAME ADDRESS AGE PHONE =============================================================== . format STDOUT= @<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<< @<<< @<<<<<<<<<< $name, $addr, $age, $phone .
Execute o código para ver a saída.
Estamos usando o símbolo @ para especificar o início do suporte do campo ou string, '<' cada caractere.
Estamos usando STDOUT para imprimir na saída padrão. Podemos mudar isso para o manipulador de arquivo que estamos usando para gravar dados no arquivo.
open(REPORT,">test.txt"); ($name,$addr,$age,$phone)=("krishna","chennai","24","929309232"); write REPORT; ($name,$addr,$age,$phone)=("shruthi","chennai","24","929309232"); write REPORT; format REPORT_TOP= =============================================================== NAME ADDRESS AGE PHONE =============================================================== . format REPORT= @<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<< @<<< @<<<<<<<<<< $name, $addr, $age, $phone
Podemos substituir '<' por '>' ou '|' para alterar o alinhamento do texto.STDOUT_TOP é usado para projetar o cabeçalho do formato. Também podemos usar o mesmo com o manipulador de arquivo usando FH_TOP (FH é o manipulador de arquivo). sobre.
Padrões de codificação Perl
Cada programador terá seu próprio senso de escrever o código usando determinados padrões; esses padrões devem ser familiares o suficiente para que outros programadores possam compreender e dar suporte ao código adequadamente.
Escrever código é simples e fácil. O problema surge quando precisa ser mantido em fases posteriores. Diretrizes e padrões de codificação adequados precisam ser seguidos ao escrever o código. Perl também define certos padrões que serão úteis para os programadores escreverem código. É aconselhável carregar 'estrito' e 'módulo de avisos' ao escrever o código. Cada um desses módulos tem sua importância. Strict nos fará declarar a variável antes de usar e também dirá se alguma palavra simples está presente em seu código. O módulo de avisos pode alternativamente ser usado passando a opção '-w' para o interpretador Perl em shebang. Os avisos serão impressos na tela de saída.
#!/usr/bin/perl –w
Abaixo estão algumas listas de padrões.
- Use o módulo 'estrito' e 'avisos'.
- Remova a variável que não está em uso.
- Os nomes das variáveis devem ser compreensíveis para outros usuários. Ex: $nome, @fileData etc.
- A documentação é necessária ao codificar um script.
- Não codifique nenhum valor, em vez disso tente buscá-los dinamicamente ou peça ao usuário para inseri-lo durante o tempo de execução (caminho do arquivo, nomes dos arquivos).
- Maximize a reutilização de código. Tente colocar o código reutilizável em sub-rotinas.
- Significa que os nomes completos devem ser fornecidos para as sub-rotinas.
- As sub-rotinas precisam ser escritas com comentários e documentação apropriados.
- Sempre inicialize variáveis.
- Sempre verifique os códigos de retorno das chamadas do sistema. A abertura de um arquivo pode ou não acontecer. Ter um código de retorno aqui exibirá o status de erro se o arquivo não existir.
Ex: aberto(FH,
- A sub-rotina sempre deve retornar um valor.
- Abra o encaracolado na mesma linha.
- Linha única BLOCO pode ser colocado em uma única linha com curvado.
- Use rótulos durante os LOOPS, seria fácil sair do loop sempre que necessário.
- Use sublinhado enquanto frases longas de palavras são escritas como um nome de variável ou sub-rotina.
- Tente usar regex simples durante a codificação.
Exemplo perfeito com padrões de codificação:
####################################################################### Program to read the file content # Date: 22-2-2013 # Author : Guru99 ######################################################################## #!/usr/bin/perl use strict; use warnings; my $line; open FR, "file.txt" || die("Cannot open the file $!"); while ($line=<FR>) { print $line; } # Looping file handler to print data
Tratamento de erros Perl
O que é uma exceção?
Uma exceção é um evento que ocorre durante a execução do programa e que suspenderá ou encerrará seu programa.
Tratamento de erros
O tratamento de erros é algo que todo programador deve tomar cuidado durante a programação. Perl também fornece técnicas de tratamento de erros com as quais podemos capturar o erro e tratá-los adequadamente.
Existem muitas maneiras de verificar erros no programa. Precisamos examinar os códigos de retorno da função que estamos usando. Se formos capazes de lidar com esses códigos de retorno adequadamente, a maior parte do tratamento de erros poderá ser alcançada.
O que retornará em caso de chamadas do sistema?
No caso de chamadas de sistema, o status de retorno será armazenado em duas variáveis especiais $? E $!
$! – Isso capturará o número do erro ou o número do erro associado à mensagem de erro.
$? – Isso manterá a função return status system().
Usando operador Perl ou Lógico
Podemos usar lógica ou operador para tratamento de erros ao usar chamadas de sistema.
Ex:
open(FH,"<test.txt");
Isso abrirá o arquivo no modo de leitura, se o arquivo existir.
E se o arquivo estiver faltando?
open(FH,"<test.txt") or die("File not exists $!"); # This will perl exit the program if the file not exists. open(FH,"<test.txt") or warn ("File not exists $!"); # This will print a warning message on STDERR
Avaliação Perl
A função Eval pode lidar com erros fatais, erros de tempo de compilação, erros de tempo de execução e aqueles erros que encerram seu código em algum momento.
A função Perl Eval pode ter um bloco de código ou uma expressão. Evals considera tudo o que é colocado nele como uma string.
Considere uma situação de chamada de uma sub-rotina que não está definida no script. Nesta situação, o script termina informando “sub-rotina indefinida &XYZ, este erro pode ser tratado na função eval.
Existem muitos usos para o bloco evals; um desses usos é quando queremos carregar o módulo específico do sistema operacional durante o tempo de execução.
Ex: Dividir por zero causa erro fatal; para lidar com isso, podemos colocar o código no bloco evals.
$a=5; $b=0; eval { '$result=$a/$b'; } if($@) { print "$@"; # All the error codes returned by evals will get stored in $@. }
Saída:
erro de sintaxe em C:\Users\XYZ\Text.pl linha 8, próximo a “)
{“
Execução de C:\Users\XYZ\Text.pl abortada devido a erros de compilação.
Exemplo: eval usando a instrução perl die.
sub test { die "Dieing in sub test \n"; } eval { test(); }; print "Caught : $@\n";
Saída:
Capturado: Morrendo no subteste
Usando Perl Tente
Perl não suporta blocos try, catch e finalmente code como outras linguagens de programação. Ainda podemos usá-los carregando um módulo Perl externo.
use Try::Tiny;
Usando isso, podemos colocar seu código no bloco try e capturar o erro no bloco warning.
No lugar de $@ usado em eval Try::Tiny usa $_.
# trata erros com um manipulador catch
try { die "Die now"; } catch { warn "caught error: $_"; # not $@ };
Usando finalmente.
my $y; try { die 'foo' } finally { $y = 'bar' }; try { die 'Die now' } catch { warn "Returned from die: $_" } finally { $y = 'gone' };
Saída:
foo em C:\Users\XYZ\Text.pl linha 4.
Podemos usar try, catch e finalmente dessa maneira.
tente {# declaração}
pegar {# declaração}
finalmente {# declaração};
Or
try { # statement } finally { # statement };
Saída:
Or
try { # statement } finally { # statement } catch { # statement };
Saída:
Programação de soquete Perl
O que é um soquete?
O soquete é um meio através do qual dois computadores podem interagir em uma rede usando endereços e portas de rede.
Suponha que A (Servidor) e B (Cliente) sejam dois sistemas que precisam interagir entre si usando Sockets para executar alguns programas.
Para implementar isso, precisamos criar soquetes em A (Servidor) e B (Cliente), A estará no estado de recebimento e B estará no estado de envio.
Um servidor):
Aqui, o servidor deseja receber uma conexão de B (Cliente) e executar algumas tarefas e enviar o resultado de volta para B (Cliente). Quando executamos o código, o sistema operacional em A tenta criar um soquete e vincula uma porta a esse soquete. Então ele ouvirá o remetente que é B.
B (Cliente).
Aqui, o cliente deseja enviar algum programa do seu sistema para A (Servidor) para algum processamento. Quando executamos o código, o sistema operacional em B tenta criar um soquete para comunicação com A (Servidor), B deve especificar o endereço IP e o número da porta de A à qual B deseja se conectar.
Se tudo correr bem, ambos os sistemas irão interagir para trocar informações através de uma porta. Perl também suporta programação de soquete.
Perl possui uma API nativa através da qual os soquetes podem ser implementados. Para facilitar, existem muitos módulos CPAN com os quais escrevemos programas de soquete.
Operações do servidor:
- Criar soquete
- Vincular soquete com endereço e porta
- Ouça o soquete nesse endereço de porta
- Aceite as conexões do cliente que tenta se conectar usando a porta e IP do servidor
- Realizar operações
Cliente Operações:
- Criar soquete
- Conecte-se ao servidor usando seu endereço de porta
- Realizar operações
soquete.io
Este é um módulo para programação de soquete, baseado em programação orientada a objetos. Este módulo não suporta o tipo de rede INET usado em redes.
IO::Soquete::INET:
Este módulo suporta domínio INET e é construído sobre IO::Sockets. Todos os métodos disponíveis em IO::Sockets são herdados no módulo INET.
Cliente e Servidor usando protocolo TCP:
TCP é um protocolo orientado a conexão; usaremos este protocolo para programação de soquete.
Antes de prosseguir, vamos ver como podemos criar um objeto para o módulo IO::Socket::INET e criar um soquete.
$socket = IO::Socket::INET->new(PeerPort => 45787, PeerAddr => inet_ntoa(INADDR_BROADCAST), Proto => udp,LocalAddr => 'localhost',Broadcast => 1 ) or die "Can't create socket and bind it : $@n";
O novo método no módulo IO::Socket::INET aceita um hash como parâmetro de entrada para a sub-rotina. Este hash é predefinido e só precisamos fornecer os valores para as chaves que queremos usar. Há uma lista de chaves usadas por este hash.
PeerAddr |
Endereço de host remoto |
PeerHost |
Sinônimo de PeerAddr |
PeerPort |
Porta ou serviço remoto |
Endereço Local |
Endereço de ligação do host local |
LocalHost |
Sinônimo de LocalAddr |
Porta Local |
Porta de ligação do host local |
proto |
Nome do protocolo (ou número) |
Formato |
Tipo de soquete |
Ouvir |
Tamanho da fila para escuta |
ReutilizarAddr |
Defina SO_REUSEADDR antes da vinculação |
armadilha para peixes |
Defina SO_REUSEADDR antes da vinculação |
ReusePort |
Defina SO_REUSEPORT antes da vinculação |
Transmissões |
Defina SO_BROADCAST antes da vinculação |
Timeout |
Valor de tempo limite para várias operações |
MultiHomed |
Experimente todos os endereços para hosts multihomed |
Bloqueio |
Determine se a conexão estará no modo de bloqueio |
Servidor.pl
use IO::Socket; use strict; use warnings; my $socket = new IO::Socket::INET ( LocalHost => 'localhost', LocalPort => '45655', Proto => 'tcp', Listen => 1, Reuse => 1, ); die "Could not create socket: $!n" unless $socket; print "Waiting for the client to send datan"; my $new_socket = $socket->accept(); while(<$new_socket>) { print $_; } close($socket);
Cliente.pl
use strict; use warnings; use IO::Socket; my $socket = new IO::Socket::INET ( PeerAddr => 'localhost', PeerPort => '45655', Proto => 'tcp', ); die "Could not create socket: $!n" unless $socket; print $socket "Hello this is socket connection!n"; close($socket);
Nota:
Na programação de soquete, teremos que executar primeiro Server.pl e depois client.pl individualmente em diferentes prompts de comando se estivermos executando em um host local.
O que são módulos e pacotes Perl
Módulos e Pacotes estão intimamente relacionados entre si e são independentes. Pacote: um pacote Perl também é conhecido como namespace e possui todas as variáveis exclusivas usadas como hashes, arrays, escalares e sub-rotinas. Módulo: Módulo é uma coleção de código reutilizável, onde escrevemos sub-rotinas nele. Esses módulos podem ser carregados em programas Perl para utilizar as sub-rotinas escritas nesses módulos.
O que são módulos Perl?
Os módulos padrão serão instalados durante a instalação do Perl em qualquer sistema. CPAN: Perl abrangente Archive Network – Um repositório global de módulos Perl. Nossos próprios módulos Perl personalizados que podem ser escritos por nós. Basicamente, um módulo quando carregado em qualquer script exportará todas as suas variáveis globais e sub-rotinas. Essas sub-rotinas podem ser chamadas diretamente como se tivessem sido declaradas no próprio script. Módulos Perl podem ser escritos com extensão .pm para o nome de arquivo Ex: Foo.pm. Um módulo pode ser escrito usando 'package Foo' no início do programa.
Módulo Perl básico:
#!/usr/bin/perl package Arithmetic; sub add { my $a=$_[0]; my $b=$_[1]; return ($a+$b); } sub subtract { my $a=$_[0]; my $b=$_[1]; return ($a-$b); } 1;
Sem saída
Para usar este módulo Perl, temos que colocá-lo no diretório de trabalho atual.
Podemos carregar um módulo Perl usando require ou use em qualquer lugar do código. A principal diferença entre require e use é exigir módulo carregado durante o tempo de execução e usar cargas durante o tempo de compilação.
#!/usr/bin/perl require Arithmetic; print Arithmetic::add(5,6); print Arithmetic:: subtract (5,6);
Aqui, no exemplo acima, estamos acessando as sub-rotinas usando o nome de módulo totalmente qualificado.
Também podemos acessar o pacote usando 'use Arithmetic'.
Exportador:
Este módulo possui uma funcionalidade padrão de importação de métodos.
#!/usr/bin/perl package Arithmetic; require Exporter; @ISA= qw(Exporter); # This is basically for implementing inheritance. @EXPORT = qw(add); @EXPORT_OK = qw(subtract); sub add { my $a=$_[0]; my $b=$_[1]; return ($a+$b); } sub subtract { my $a=$_[0]; my $b=$_[1]; return ($a-$b); } 1;
O array @EXPORT pode ser usado para passar uma lista de variáveis e sub-rotinas que por padrão serão exportadas para o chamador do Módulo.
O array @EXPORT_OK pode ser usado para passar uma lista de variáveis e sub-rotinas que serão exportadas sob demanda, onde o usuário deve especificar ao carregar o módulo.
#!/usr/bin/perl use Arithmetic qw(subtract); print add(5,6); print subtract (5,6);
Por padrão, adicionar sub-rotina será exportado. O método Subtract não será exportado se não for especificado ao carregar o módulo.
Programação Orientada a Objetos em Perl
Nesta seção, aprenderemos como criar módulos Perl orientados a objetos. Primeiro, vamos ver qual é o objeto? Um objeto é uma instância com a qual podemos acessar, modificar e localizar alguns dados em qualquer módulo Perl. Isso nada mais é do que fazer com que seu pacote Perl existente, variáveis e sub-rotinas atuem como classes, objetos e métodos em referência a outras linguagens de programação.
Criar turma
Já sabemos como criar módulos do tópico anterior. O objetivo da classe é armazenar métodos e variáveis. Um módulo Perl terá sub-rotinas que são métodos. Precisamos acessar essas variáveis e objetos de sub-rotinas.
Construtor Perl
Um construtor em Perl é um método que irá executar e nos retornar uma referência com o nome do módulo marcado para a referência. Isso é chamado de bênção para a classe. Usamos uma variável específica para abençoar uma classe Perl, que é abençoada.
#!/usr/bin/perl package Arithmetic; sub new { my $class=shift; my $self={}; bless $self, $class; return $self; } sub add { my $self= shift; my $a=$_[0]; my $b=$_[1]; return ($a+$b); } sub subtract { my $self= shift; my $a=$_[0]; my $b=$_[1]; return ($a-$b); } 1;
O novo método usado como construtor para uma classe. Este construtor criará um objeto para nós e retornará ao script que está chamando este construtor.
#!/usr/bin/perl use Arithmetic; my $obj= Arithmetic->new(); my $result= $obj->add(5,6); print "$result"; $result = $obj->subtract(6,5); print "$result";
Aqui, precisamos entender como o objeto foi criado. Sempre que tentamos criar um objeto para a classe, precisamos usar o nome completo da classe. Suponha que a classe Perl esteja localizada em algum lib\Math\Arithmetic.pm. E, se quisermos acessar esta classe Perl a partir do diretório lib, teremos que fornecer o caminho completo para a classe enquanto chamamos o script.
use lib::Math::Arithmetic;
my $obj = lib::Math::Arithmetic->new();
É assim que acontece a criação de objetos em Perl.
@INC:
Como o script Perl sabe onde existe o módulo da biblioteca? Perl conhece apenas o diretório atual do script e o caminho da biblioteca embutida do Perl. Sempre que usarmos um módulo Perl, que não está localizado no diretório atual ou no caminho da biblioteca Perl, o script sempre falhará. Sobre @INC, este é um array que contém todos os caminhos de diretório onde deve procurar os módulos Perl. Tente executar este comando e veja qual será o resultado.
perl –e "print @INC"
Isso fornecerá alguma saída, e esse é o caminho onde os módulos lib estarão disponíveis. Sempre que usamos qualquer novo módulo de biblioteca, precisamos dizer ao Perl, intérprete, para procurar aquele local específico onde o módulo Perl está disponível.
push(@INC, "PATH TO YOUR MODULE");
Faça disso sua primeira linha de código. Isso dirá ao seu intérprete para examinar esse Caminho. ou usar
lib Arithmetic; # List here is your Perl Module location
Destruidor Perl
O destruidor de um objeto é chamado por padrão no final e antes da saída do script. Isso é usado para destruir seus objetos da memória.
Script de shell PERL V/s
- A programação em Perl não causa problemas de portabilidade, o que é comum ao usar shells diferentes em scripts de shell.
- O tratamento de erros é muito fácil em Perl
- Você pode escrever programas longos e complexos em Perl facilmente devido à sua vastidão. Isso contrasta com o Shell que não suporta namespaces, módulos, objetos, herança, etc.
- Shell tem menos bibliotecas reutilizáveis disponíveis. Nada comparado ao CPAN do Perl
- Shell é menos seguro. São chamadas de funções externas (comandos como mv, cp etc dependem do shell que está sendo usado). Pelo contrário, Perl faz um trabalho útil ao usar funções internas.
Como PERL é usado em testes de automação
Perl é amplamente utilizado em automação. Podem não ser as melhores linguagens de programação do mundo, mas são mais adequadas para certos tipos de tarefas. Vamos discutir onde e por que o Perl é usado Teste de automação.
Teste de armazenamento
O que é armazenamento? Dados armazenados em Arquivos.
Suponha que temos um armazenamento relacionado Caso de teste onde temos que escrever dados em uma partição, lê-los e verificar se os dados estão escritos corretamente.
Isso pode ser feito manualmente, mas um testador manual pode executar o mesmo 10000 vezes? Será um pesadelo! Precisamos de automação
A melhor ferramenta para automatizar qualquer coisa relacionada ao armazenamento é o Perl por causa de suas técnicas de manipulação de arquivos, REGEX e análise de arquivos poderosa que consome menos tempo de execução em comparação com outras linguagens de programação.
Por que precisamos testar o armazenamento? Pense em grandes data centers onde os dados fluirão continuamente de um sistema para outro, com milhares de registros armazenados por segundo. Testar a robustez desse mecanismo de armazenamento é essencial.
Muitas empresas como HP, Dell, IBM e muitos fabricantes de servidores usam Perl como interface para testar a funcionalidade em domínios de armazenamento e rede. A NetApp é uma dessas empresas que trabalha totalmente em Storage e usa Perl como linguagem de programação para automatizar os casos de teste.
Se você estiver interessado em Perl Automation, seria aconselhável aprender sobre armazenamento e rede Concepts.
Teste de servidor e rede:
PERL é amplamente utilizado no tempo de atividade do servidor e no monitoramento de desempenho.
Considere um data center que possui 100 hosts (servidores). Você é obrigado a se conectar a cada host e executar alguns comandos remotamente. Você também deseja reiniciar o sistema e verificar quando ele voltará a ficar online.
Fazer essa tarefa manualmente para todos os 100 hosts será um pesadelo. Mas podemos automatizar isso facilmente usando PERL
Etapas de design para alcançar a automação acima usando PERL
- Obtenha informações do arquivo sobre as informações do host, como (IP, nome de usuário e senha).
- Use Net::SSH2 para conectar-se a cada sistema e estabelecer um canal para executar os comandos.
- Execute o conjunto de comandos necessários, ex: ls, dir, ifconfig,ps etc.
- Reiniciar o sistema.
- Aguarde 10 minutos para que o sistema seja ativado.
- Faça ping no sistema usando o módulo Net::Ping e imprima o status.
Codificaremos o cenário acima.
Vamos pegar um arquivo chamado Input.txt que armazenará as informações completas sobre todos os hosts nos quais precisamos nos conectar e executar o comando.
Entrada.txt
Senha raiz 192.168.1.2
Senha raiz 192.168.1.3
192.168.1.4 raiz raiz123
HostCheck.pl
use Net::SSH2; use Net::Ping; use strict; use warnings; my $ping = Net::Ping->new(); # Creating object for Net::Ping my $SSHObj = Net::SSH2->new(); #Creating object for Net::SSH2 open( FH, "Input.txt" ); # Opening file and placing content to FH my @hosts = <FH>; my $ip; my @ips; foreach (@hosts) { if ( $_ =~ /(.*)\s+(\w+)\s+(.*)/ ) #Regex to get each info from file { $ip = $1; my $user = $2; my $password = $3; $SSHObj->connect($ip); print "Connecting to host -- $ip --Uname:$user --Password:$password\n"; my $status = $SSHObj->auth_password( $user, $password ); print "$status\n"; die("unable to establish connection to -- $ip") unless ($status); my $shell = $SSHObj->channel(); print "$_\n" while <$shell>; $shell->blocking(1); $shell->pty('tty'); $shell->shell(); sleep(5); #Executing the list of command on particular host. Can be any command print $shell "ls \n"; print "$_\n" while <$shell>; print $shell "ps \n"; print "$_\n" while <$shell>; print $shell "dir \n"; print "$_\n" while <$shell>; print $shell "init 6\n"; #rebooting the system push( @ips, $ip ); } } sleep 600; foreach (@ips) { if ( $ping->ping($_) ) { print "$_ is alive.\n" if $ping->ping($_); } else { print "$_ is not still up --waiting for it to come up\n"; } }
Teste da Web
Perl não está restrito apenas a testes de armazenamento e rede. Também podemos realizar testes baseados na Web usando PERL. WWW-Mecanizar é um módulo usado para teste da web. Basicamente, ele não inicia nenhum navegador para testar a funcionalidade de aplicativos da web, mas usa o código-fonte das páginas HTML.
Também podemos realizar testes baseados em navegador usando Selenium IDE, RC, driver Web. Perl é suportado para Selenium.
\n”; #this manterá a string restante após a conclusão da correspondência do padrão.
imprimir "