[Triangulo-pm] [Perl 5.10] o operador "default"
Adriano Ferreira
a.r.ferreira em gmail.com
Segunda Novembro 19 06:02:56 PST 2007
Entre as novidades do Perl 5.10 (cujo release candidate 1 chegou ao
CPAN neste sábado -
http://search.cpan.org/~rgarcia/perl-5.10.0-RC1/), temos um novo
operador. É o operador '//' conhecido como operador 'default' ou
'defined-or'.
O propósito deste operador é muito similar ao operador '||' (que
corresponde a um OU) com algumas diferenças sutis e úteis.
O operador '||' é avaliado assim
exp1 || exp2 = exp1, se o resultado da exp1 é verdadeiro
exp1 || exp2 = exp2, caso contrário
Como este operador existe há muito tempo no Perl é muito comum que ele
seja usado quando é desejável que uma expressão tenha um certo valor
(ou 'default') se ele não for especificado explicitamente.
Por exemplo,
sub rule {
my $n = $_[0];
my $char = $_[1] || '-';
return $char x $n;
}
constrói uma régua de $n caracteres com o caracter especificado ou '-'.
Assim,
rule(3) retorna '---'
rule(4,'+') retorna '++++'
No entanto,
rule(5, 0) retorna '-----'
porque 0 é *falso* (assim como os outros valores de falso: '' - o
string vazio, 0 - zero inteiro, 0.0 - zero em ponto flutuante, undef).
Antes, a solução era trocar a expressão simples " $_[1] || '-' " por
um mais complicada e precisa:
my $char = defined $_[1] ? $_[1] || '-'; # atenção ao jogo para
evitar os efeitos colaterais do shift
Mas a semântica do operador '//' é exatamente esta:
exp1 || exp2 = exp1, se o resultado da exp1 é definido (não é 'undef')
exp1 || exp2 = exp2, caso contrário
Então a expressão corrigida fica mais concisa e elegante:
my $char = $_[1] // '-';
Assim, para inúmeras aplicações que antes empregariam o '||' com o
temor de que outros valores de falso levassem a surpresas, a melhor
alternativa é agora o uso do 'defined-or'.
----
Peço aos assinantes desta lista que divulguem esta lista. Ela pode (e
deve) se tornar um lugar para trocar experiências sobre a linguagem
Perl e a programação com ela. A audiência a ser atingida é tão variada
quanto se puder pensar: quem é curioso com programação, quem está
iniciando com Perl, quem já sabe muito e quer compartilhar. Todos são
bem vindos. Eu gostaria muito também que a participação de quem mora
no Triângulo Mineiro aumentasse e formássemos um grupo interessado e
familiarizado com a linguagem Perl (que é ótima para fazer o que você
precisa -- e se chegarem perto o bastante para ver, verão que não é só
propaganda).
Saudações,
Adriano Ferreira
Mais detalhes sobre a lista de discussão Triangulo-pm