ϟ●•LσяdKиσw•●ϟ ϟ●•LσяdKиσw•●ϟ  • 29.04.12 10:53

Mini-Curso de Perl [PARTE 2] Empty Mini-Curso de Perl [PARTE 2] 29.04.12 10:53

Bom,como prometi,essa é a segunda parte do Mini-Curso de Perl.

Variáveis

As variáveis em perl são singulares ou plurais, chamando-se escalar às variáveis no singular, e array às
variáveis no plurar.
Por terem um símbolo que antecede o nome da variável, um escalar e um array podem ter o mesmo nome,
não havendo colisão.
$foo = 1;
@foo = (1,2,3,4,5);
print "$foo\n;
print "@foo\n";
1
1 2 3 4 5
»
»
São automaticamente definidas e iniciadas após a sua referência no código, i.e. não necessitam de ser
declaradas.
- 2 -
$a = $a + 4; # $a = 0 + 4 = 4
print $a*3 + $b, "\n"; # print 4 * 3 + 0 = 12
» 12
Não existem tipos de dados (inteiros, caracteres, estruturas...), sendo que a unidade mais elementar manipulada
em perl, é o escalar.
Apesar de não ser necessário declarar variáveis, é possivel fazê-lo, usando o operador my. Uma variável
introduzida via my, é apenas válida no scope em que foi definida (o que normalmente significa o bloco em
que está inserida, tornando-a privada nesse bloco).
my $foo; # global
# de facto, $foo é privada ao scope em que está definida. como neste caso
# esse scope é todo o script, para todos os efeitos, $foo é global.
$foo = 1;
print "$foo\n"; # 1
sub x {
my $foo=5; # privada da funcao x
print "$foo\n"; # 5
}
x();
$foo++; # incrementa $foo
print "$foo\n"; # 2
1
5
2
»
»
»
Para pré-declarar variáveis pode-se usar uma de duas formas (ver “variáveis que não carregam”, §12.2,
p17):
# perl >=v5.6
our @var; # definida algures, mas conhecida daqui para a frente
# perl >=5.005
use vars ( @var ); # semelhante (com algumas diferenças: perldoc -tf our)

Escalares

Prefixam-se por “$” (ex: “$a”), e podem tomar valores numéricos ou strings (sequências de caracteres).
Representam valores singulares, i.e. cada escalar tem o valor de um numérico, ou de uma string.
Podem ser números:
$number = 4; # notacao inteira
$number = 1.25; # notacao real
$real = 3.4e22; # notacao cientifica
$octal = 0377; # notacao octal: 255 decimal
$hex = 0xff; # notacao hexadecimal: 255 decimal
Notas:
• hexadecimal é introduzido, quando prefixado por 0x
• octal é introduzido, quando prefixado por 0
• números em perl são entidades reais (parte inteira e parte fraccionária). Pode-se instruir a serem usadas
apenas expressões numéricas inteiras, usando o modificador “use integer;”, o que normalmente não é
necessário.
Podem ser strings:
$a = "xpto";
$b = ’foo bar’;
Notas:
• as strings podem ser introduzidas entre plicas (’’) ou entre aspas ("")
• entre ’’, tudo o que estiver dentro, é tratado literalmente.
• entre "", alguns caracteres são interpretados de forma especial, incluindo os caracteres $ e @, que
provocam a expansão de escalares e arrays, respectivamente.
\n fimde linha
\r return
- 3 -
\t tab
\b backspace
\\ backslash
\" aspa
\l converte a próxima letra em minúscula (ex: print "\lCarlos\n";’ )
\L converte em minúsculas até \E
\u converte a próxima letra em maiúscula
\U converte em maiúsculas até \E
\E termina \U ou \L
$var expande o valor da variável $var
@var expande o valor de $var[0]$"$var[1]$"$var[2]...
2.2. Arrays
Prefixam-se por “@” (ex: “@a”), contêm zero ou mais escalares, e indexam-se numericamente:
@a = (1, "xpto", 3.5); # dois números e uma string
@b = (); # array vazio
@c = (1..5) # mesmo que (1,2,3,4,5)
@copy = @c; # copia de @c
$copy[0] = 12; # set do primeiro elemento a 12: (12, 2,3,4,5)

Notas:

• emmodo escalar ("scalar @copy", ou "$a+@copy"), o valor de @copy é o número de elementos
no array:
for ($i=0; $i<@a; $i++) { print $a[$i],"\n"; }
escreve todos os elementos de @a
• os arrays (como tudo o resto) em perl são zero based, i.e. o primeiro elemento de um array, tem index 0
($a[0]) e o último tem index @a-1 ou $#a ($a[@a-1] ou $a[$#a])
2.3. Arrays associativos (hashes)
Prefixam-se por “%” (ex: “%a”), contêm zero ou mais pares chave/valor (key/value), em que ambos são
escalares, e indexam-se por strings.
Internamente, não é mantida a ordem dos elementos que constituiem a hash1 (ver “funções úteis para
arrays associativos”, §9.5, p13).
%a = ("carlos", 12, "joao", 34, "xpto", 15);
$b = $a{"carlos"} # $b vale 12
$a{’joao’} = 44; # $a{’joao’} muda de 34 para 44
Notas:
• o número de elementos de uma lista tem que ser par, para poder ser atribuída a uma hash.

Notas gerais sobre variáveis

(1) variáveis de diferentes tipos podem ter o mesmo nome.
my $a;
my @a;
my %a;
$a = "xxx";
@a = (1,2);
%a = ("xx", 3, "yy", 4);
print $a, "\n";
print $a[0], " ", $a[1], "\n";
print $a{"xx"}, " ", $a{"yy"}, "\n";
xxx
1 2
3 4
»
»
»
1 os elementos são distribuídos de acordo com um algoritmo de dispersão, que normalmente atribui um valor numérico inteiro
às chaves.
- 4 -
(2) o valor undef pode ser atribuido a escalares, ou membros de listas, e hashes, para designar
indefinição.
Indefinição é semelhante a “vazio”, só que responde como falso ao operador defined enquando
vazio faz retornar verdadeiro.
$a = ""; # $a tem a string vazia
undef $b; # $b está indefinido
$b = undef; # equivalente
defined $a; # verdade
defined $b; # falso
$a eq $b; # verdade (undef foi tratado como string vazia)
($a,undef,$c) = my_func(); # ignora o segundo valor retornado por my_func()
(3) dependendo do contexto, as variáveis (e não só), podem ser interpretadas em modo escalar ou modo
lista, com comportamentos diferentes.
# [lista = escalar]
@a = 5; # escalar, visto como uma lista
@a = (5); # equivalente
@a = "xxx"; # tb funciona com nao numericos
@a = ("xxx");
# [hash = escalar]
%a = 5; # uma chave, com valor undef
%a = (5, undef); # equivalente
# [escalar = lista]
$n = @a; # $n é numerico, e fica com o numero de elementos de @a
# [escalar = hash]
$n = %a;# $n é numerico, e contem estatisticas sobre a
# taxa de ocupacao da hash
# forcar o contexto escalar: operador “scalar”
print scalar @a,"\n"; # imprime o numero de elementos de @a
print @a,"\n"; # imprime todos os elementos de @a, separados por $, ("")
print "@a\n"; # imprime todos os elementos de @a, separados por $" (" ")
(4) as variáveis quando são autoiniciadas, ou introduzidas via my, são iniciadas a undef ou vazio,
conforme se tratem de escalares ou não. (as variáveis não escalares têm comportamentos não intuitivos
quando se lhes aplica o operador undef).
# "esvaziar" vários tipos de variaveis
undef $foo; # ok em escalares
@foo = (); # recomendado em listas
%foo = (); # ... e hashes
# testar se as variaveis nao estao vazias
defined $foo and ... # pode ser perigoso fazer: "$foo and...", porque
# se $foo==0, falha a condicao, apesar de $foo estar definida
@foo and ...
%foo and ...

Na próxima aula,irei ensinar sobre os Operadores. Aguardem...
Permissões neste sub-fórum
Não podes responder a tópicos

BH Servers

Recomendamos a BH Servers com proteção DDOS gratuita em Cloud Server de alta performance. Entrega imediata.