[SP-pm] atalhos toscos

Stanislaw Pusep creaktive at gmail.com
Tue Oct 5 13:44:06 PDT 2010


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? :)
-------------- Pr�xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20101005/c2964dea/attachment.html>


More information about the SaoPaulo-pm mailing list