[SP-pm] atalhos toscos

Renato Santos renato.cron at gmail.com
Tue Oct 5 14:18:03 PDT 2010


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 =
$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 at 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 at pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
Renato Santos
http://www.renatocron.com/blog/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20101005/bde73b89/attachment.html>


More information about the SaoPaulo-pm mailing list