From a.r.ferreira em gmail.com Sat Nov 17 10:41:19 2007 From: a.r.ferreira em gmail.com (Adriano Ferreira) Date: Sat, 17 Nov 2007 16:41:19 -0200 Subject: [Triangulo-pm] Perl 5.10 RC1 Message-ID: <73ddeb6c0711171041n2d5a4159p698723f93027cf48@mail.gmail.com> A versão preliminar do interpretador Perl (5.10 RC1) chegou ao CPAN hoje: http://search.cpan.org/~rgarcia/perl-5.10.0-RC1/ Muitas novidades (tanto em sintaxe e semântica quanto em novos módulos que agora fazem parte do 'core' -- os módulos padrões da distribuição oficial Perl). From a.r.ferreira em gmail.com Mon Nov 19 06:02:56 2007 From: a.r.ferreira em gmail.com (Adriano Ferreira) Date: Mon, 19 Nov 2007 12:02:56 -0200 Subject: [Triangulo-pm] [Perl 5.10] o operador "default" Message-ID: <73ddeb6c0711190602u31579373n362a10d540053068@mail.gmail.com> 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 From lucasmateus.oliveira em gmail.com Wed Nov 21 18:03:06 2007 From: lucasmateus.oliveira em gmail.com (Lucas Mateus) Date: Wed, 21 Nov 2007 23:03:06 -0300 Subject: [Triangulo-pm] [Perl 5.10] o operador "default" In-Reply-To: References: <73ddeb6c0711190602u31579373n362a10d540053068@mail.gmail.com> Message-ID: Outra grande importacia seria se o HASH %- gravasse os valores das RegExp recursivas como por exemplo separar numeros e palavras: $var =~ /(?\d+)(? escreveu: > > Acho que esse definede-or "//" vai causar confusão ao menos no começo. > > my $var = 0; > > $var //= 1; > print $var; # resultado 0 > > $var ||= 1; > print $var; # resultado 1 > > > > > my $var; > $var //= 1; > print $var; # resultado 1 > > $var ||= 1; > print $var; # resultado 1 > > > > > > Em 19/11/07, Lucas Mateus escreveu: > > > > E agora teremos SWITCH > > > > given ($foo) { > > when (/^abc/) { $abc = 1; } > > > > when (/^def/) { $def = 1; } > > when (/^xyz/) { $xyz = 1; } > > default { $nothing = 1; } > > > > } > > > > > > > > Algumas mudanças com RegExp recursiva: nasce dois novos HASHES %+ e %- > > > > > > > > Em 19/11/07, Lucas Mateus < lucasmateus.oliveira em gmail.com> escreveu: > > > > > > Grato cara, vo esparramar essa informação aki =) mais uma vez obrigado > > > !!! > > > > > > > > > > > > Em 19/11/07, Adriano Ferreira < a.r.ferreira em gmail.com> escreveu: > > > > > > > > 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 > > > > _______________________________________________ > > > > Triangulo-pm mailing list > > > > Triangulo-pm em pm.org > > > > http://mail.pm.org/mailman/listinfo/triangulo-pm > > > > http://mail.pm.org/pipermail/triangulo-pm/ > > > > > > > > > > > > > -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://mail.pm.org/pipermail/triangulo-pm/attachments/20071121/3b38987f/attachment.html