[SP-pm] atalhos toscos

Daniel de Oliveira Mantovani daniel.oliveira.mantovani at gmail.com
Tue Oct 5 22:30:57 PDT 2010


2010/10/5 Renato Santos <renato.cron em gmail.com>:
> Tenho em mente que o
> =()=
> ou mais formatado:
> $var = () = @array
> Faz com que todo o conteudo do @array seja jogado nas variaveis
> undef,undef,... e
> quando diz que um scalar = array, ele recebe o valor dos elementos da
> array.
> Me precipito a dizer que, como o perl não esta com strict, quando você faz:
> $var = () = $ref_array
> o perl lê o $ref_array como array e joga pro (), que por sua vez é uma array
> verdadeira, e joga o valor de quantidade no $var, pois se fosse $var =

Não, "()", não é um array e está longe de ser. Além disso existe
diversas diferenças entre um array e uma lista.
Você não pode aplicar métodos modificadores em uma lista, como:
push, shift, unshift e pop.

Além do que, usando no contexto scalar,
my $foo = ("bar", "baz");

Sempre vai retornar o righthand side, ao contrário de um array que
retorna o número total de elementos,

my @foo = a .. z;
my $bar = @foo;

$bar vai conter 26.

> $ref_array iria receber a associação
>
> Lendo melhor, lembrei que expressões regulares retornam listas dos groups.
>
> --------
> Uma coisa que usos as vezes, em scripts mesmo é:
> $string = "231 bla bla bla";
> $num = $string =~ /(\d+)/ && $1;
> Assim, quando há match, o valor ja vai direto pro $num, mas tambem pode ser
> escrito assim:
> ($num) = $string =~ /(\d+)/;
> Agora to pensando porque faço com && as vezes....
> <intervalo de alguns segundos...>
> Ah, lembrei:
> $hashref = {
>     some_key => $string =~ /(\d+)/ && $1
> }
>
>
> 2010/10/5 Stanislaw Pusep <creaktive em gmail.com>
>>
>> Desde que uso o Bash, tenho uma grande tara por "one-liners"; aquelas
>> "linhas de comando gigantescas que são programas". Como o Perl é
>> extremamente versátil para funcionar via pipe, os meus "one-liners"
>> gradualmente cresceram a ponto de ocuparem várias linhas, devido ao limite
>> natural da largura da tela :)
>> Seguem alguns snippets da minha "coleção":
>>
>>
>> perl '-F/\s+/' -lane '$s += $F[9] }{ print $s"' access.log
>>
>> Imprime a somatória dos tamanhos dos responses HTTP (10-a coluna no
>> formato CLF do Apache). O atalho é o "}{", que fecha o bloco
>> "while(<>){...}" aberto pelo parâmetro "-n". Por extenso, o equivalente
>> seria:
>> perl -le 'while (<>) { @F = split /\s+/; $s += $F[9] }; print "$s'
>> access.log
>>
>>
>> perl -e '$x = 10; while ($x) { $x= ~-$x; print "$x\n" }'
>>
>> Código alternativo para contagens regressivas.
>> "~-$x" decrementa $x desde que $x seja diferente de 0. Por extenso, seria
>> "(~(-$x))".
>>
>>
>> perl -le 'print ~~localtime'
>>
>> "~~" força o contexto escalar. No caso do "localtime", que retorna array
>> no contexto "normal", porém retorna string no contexto escalar, vai retornar
>> a data e a hora por extenso. No caso do array, retorna o seu último
>> elemento. Me arrisco a dizer que equivale ao velho e bom 'scalar'.
>>
>>
>> perl -lne '$s+ =()= /\S+/g }{ print $s'
>>
>> "=()=", sucedido de um array, retorna o número de elementos no mesmo. Por
>> extenso, são tantos parenteses que parece o Lisp; nem me arrisco a tentar
>> entender :/
>>
>>
>> perl -le '$x = 12345; $y = 67890; ($x!=$y)&&($x^=$y^=$x^=$y); print "$x
>> $y"'
>> BÔNUS! Isso em particular não tem utilidade nenhuma, mas é, no mínimo,
>> curioso. Serve para dar um "swap" de valores (NUMÉRICOS!) das variáveis, ou
>> seja, é equivalente a "$tmp = $y; $y = $x; $x = $tmp;"
>>
>>
>> Alguém mais teria alguma idiossincrasia para compartilhar? :)
>>
>>
>> _______________________________________________
>> SaoPaulo-pm mailing list
>> SaoPaulo-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
>
>
> --
> Renato Santos
> http://www.renatocron.com/blog/
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
http://www.danielmantovani.com

"If you’ve never written anything thoughtful, then you’ve never had
any difficult, important, or interesting thoughts. That’s the secret:
people who don’t write, are people who don’t think."


More information about the SaoPaulo-pm mailing list