Executando Perl
Inicialmente devemos criar um arquivo com a extensão .pl
Nas primeira linha devemos colocar a instrução abaixo:
#!/usr/bin/perl
Esta instrução é o caminho do interpretador do Perl.
para executar devemos usar a instrução abaixo:
$ perl exec1.pl
ou
$ ./exec1.pl
já que mencionamos o interpretador na primeira linha, lembrado de dar permissão para execução.
Seguem algumas instruções de linha de comando úteis
-w -> Solicita à Perl para avisar se há pratica de programação perigosa, pode ser usado “use warnings;”, mas só seŕa avisado dentro do contexto.
-T -> Ativa o modo “taint” da Perl. Neste modo toda entra de uma fonte externa é colocada em dúvida por padrão.
-c -> Verfica os erros de sintaxe de um script sem executar.
-d -> Executa o script usando um depurador imbutido da Perl.
-e -> Esta opção é usada quando define se que uma string seja o código a sere executado.
Scalar
Uma variável de scalar mantém apenas um único item dos dados.
Toda variável de scalar é precedida de $.
$texto = 'Ola mundo!';
$contador = 100;
$contador = 'Cem';
Em Perl a mesma variável pode conter texto e números a Perl se encarrega de converter conforme o contexto.
Questão das aspas.
Se uma string está entre aspas duplas e contém nomes de variáveis, então essas variáveis são substituidas por seus valores no final da string.
Se a string está entre apóstrofes, então a subistituição da variável não ocorrerá.
É importante ressaltar que usando aspas duplas é possível usar os caracteres de especiais, como o \n \t entre outros.
O exemplo abaixo exemplifica o uso da aspas.
1 #!/usr/bin/perl
2
3 use warnings;
4 use strict;
5
6 my $marido,
7 my $mulher;
8 my $filha;
9 my $mensagem1;
10 my $mensagem2;
11
12 $marido = "Dyego";
13 $mulher = "Vanessa";
14 $filha = "Beatriz";
15
16 $mensagem1 = "O $marido ama muito a $mulher e a $filha.\n";
17 $mensagem2 = 'O $marido ama muito a $mulher e a $filha.\n';
18
19
20 # imprime: O Dyego ama muito a Vanessa e a Beatriz.
21 print $mensagem1;
22
23 # imprime: O $marido ama muito a $mulher e a $filha.\n
24 print $mensagem2;
Array
Um array contém uma lista de valores scalars ordenados
Um array é precedido de @
@vazio = ();
@mamiferos = ('macaco', 'elefante', 'urso');
@repteis = ('jacaré', 'tartaruga', 'lagarto');
@animais = (@mamiferos, @repteis); # Obtém um array de de seis elementos.
($carnivoro, $hebivoro, $onivoro) = @repteis;
Para acessar os elementos do array dever ser usada a sintaxe abaixo:
$array[0]
Esta sintaxe pode ser usada para estabelecer e atribuir valor para um scalar.
$paquiderme = $mamiferos[1]; # valor é elefante
Quanto trabalhamos com o valor individual de array usamos o prefixo de um scalar $.
É possível acessar os últimos valores de um array usando o índice negativo.
$maritimo = $repteis[-2]; # valor é tartaruga
Para obter o tamanho de um array basta atribuir o array a um scalar.
$qtde = @animais; # valor retornado é 6
Há uma sutil diferença entre uma lista de um array
$contador = @repteis; # O conteúdo de $contador é 3
$ultimo = ('macaco', 'usro'); # O conteúdo de $ultimo é 'urso'
Algumas funções para manipulação de arrays
- push – Acrescenta os elementos da lista ao final do array. (push ARRAY, LIST)
- pop – Remove e retorna o último elementos do array. (pop ARRAY)
- shift – Remove e retorna o primeiro elemento do array. (shift ARRAY)
- unshift – Acrescenta os elementos da lista na frente do array. (unshift ARRAY, LIST)
- splice – Remove e retorna os elementos LENGTH do ARRAY que começa no elemento OFFSET e os substitui pelos elementos da LIST. Se LIST for omitida então os elementos removidos serão simplesmente apagados. se LENGTH for omitido então tudo desde OFFSET até o final do ARRAY será removido. (splice ARRAY, OFFSET, LENGTH, LIST)
Map e Grep são outras listas bastante úteis de processamento de funções.
- map – Executa o código e monta a lista com os valores de retorno sem avaliar se é verdadeiro
- grep – Executa o código e monta a lista com os valores avaliando se o código retornado é verdadeiro.
Criando uma lista de quandrados
@numeros = (1..10);
@quadrados = map { $_ * $_ } @numeros;
Cria uma lista do os valores impares
@impares = grep { $_ % 2 } @numeros;
Abaixo segue um código que mostra o uso de arrays:
1 #!/usr/bin/perl
2
3 use warnings;
4 use strict;
5
6 my @vazio;
7 my @mamiferos;
8 my @repteis;
9 my @animais;
10 my $carnivoro;
11 my $herbivoro;
12 my $onivoro;
13 my $paquiderme;
14 my $maritimo;
15 my $qtde;
16 my $contador;
17 my $ultimo;
18 my $resultado;
19 my @numeros;
20 my @quadrados;
21 my @impares;
22
23 # Imprime o array @vazio
24 @vazio = ();
25 print "Vazio:\n";
26 print @vazio;
27
28 print "\n\n";
29
30 # Imprime o array @mamiferos
31 @mamiferos = ('macaco', 'elefante', 'urso');
32 print "Mamiferos:\n";
33 foreach (@mamiferos){
34 print "- $_ \n";
35 }
36 print "\n\n";
37
38 # Imprime o array @repteis
39 @repteis = ('jacaré', 'tartaruga', 'lagarto');
40 print "Repteis: \n";
41 foreach (@repteis){
42 print "- $_ \n";
43 }
44 print "\n\n";
45
46 # Imprime o array @animais
47 @animais = (@mamiferos, @repteis); # Obtém um array de de seis elementos.
48 print "Animais:\n";
49 foreach(@animais){
50 print "- $_ \n";
51 }
52 print "\n\n";
53
54 # Imprime os conteúdos do array atribuido as variáveis scalar
55 ($carnivoro, $herbivoro, $onivoro) = @repteis;
56 print "Carnivoro: $carnivoro \n";
57 print "Herbivoro: $herbivoro \n";
58 print "Onivoro: $onivoro \n";
59
60 print "\n\n";
61
62 # Imprime urso
63 print "Imprime o 3º elemento do array animais: ";
64 print $animais[2];
65
66 print "\n\n";
67
68 # Imprime Elefante
69 print "Paquiderme: ";
70 $paquiderme = $mamiferos[1];
71 print $paquiderme;
72
73 print "\n\n";
74
75 # Imprime Tartaruga
76 print "Réptil marítimo: ";
77 $maritimo = $repteis[-2];
78 print $maritimo;
79
80 print "\n\n";
81
82 # Imprime o tamanho do array
83 $qtde = @animais;
84 print "Temos $qtde animais.";
85
86 print "\n\n";
87
88 # Mostra a diferença entre lista e array
89 $contador = @repteis; # O conteúdo de $contador é 3
90 print "Temos $contador repteis \n";
91 =comment
92 O conteúdo de $ultimo é 'urso' e apresenta uma mensagem de erro,
93 pois está sendo atribuido somente o último item, o correto é usar um array para receber a lista.
94 =cut
95 $ultimo = ('macaco', 'usro');
96 print "Último item da lista: $ultimo";
97
98 print "\n\n";
99
100 # Push - Acrescenta os elementos da lista ao final do array
101 push @repteis, ('cobra', 'iguana', 'camaleão');
102 print "Mais repteis: \n";
103 foreach (@repteis){
104 print "- $_ \n";
105 }
106
107 print "\n\n";
108
109 # pop - Remove e retorna o último elementos do array
110 $resultado = pop @mamiferos;
111 print "Foi retirado o $resultado da lista de mamiferos:\n";
112 foreach (@mamiferos){
113 print "- $_ \n";
114 }
115
116 print "\n\n";
117
118 # shift - Remove e retorna o primeiro elemento do array.
119 $resultado = shift @repteis;
120 print "Foi removido o $resultado da lista de repteis: \n";
121 foreach (@repteis){
122 print "- $_ \n";
123 }
124
125 print "\n\n";
126
127 # unshift - Acrescenta os elementos da lista na frente do array.
128 unshift @animais, ('arara', 'pavao', 'tucano');
129 print "Mais animais: \n";
130 foreach (@animais){
131 print "- $_ \n";
132 }
133
134 print "\n\n";
135
136 =comment
137 splice - Remove e retorna os elementos LENGTH do ARRAY que começa no elemento OFFSET
138 e os substitui pelos elementos da LIST
139 =cut
140 splice @animais, 0, 3, ('garça', 'harpia', 'gavião');
141 print "Alteradas as aves da lista de animais: \n";
142 foreach (@animais){
143 print "- $_ \n";
144 }
145
146 print "\n\n";
147
148 # map - Executa o código e monta a lista com os valores de retorno sem avaliar se é verdadeiro
149 @numeros = (1..10);
150 print "Números inteiros: \n";
151 foreach (@numeros){
152 print "$_, ";
153 }
154 @quadrados = map { $_ * $_ } @numeros;
155 print "\nO quadrado dos números acima:\n";
156 foreach (@quadrados){
157 print "$_, ";
158 }
159
160 print "\n\n";
161
162 # grep - Executa o código e monta a lista com os valores avaliando se o código retornado é verdadeiro.
163 print "Mosta os números ímpares:\n";
164 @impares = grep { $_ % 2 } @numeros;
165 foreach (@impares){
166 print "$_ , ";
167 }
168
169 print "\n\n";