[SP-pm] atalhos toscos

Eden Cardim edencardim at gmail.com
Tue Oct 5 16:01:41 PDT 2010


2010/10/5 Stanislaw Pusep <creaktive em gmail.com>:
> 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 for reverse 0..10'

> 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'.

Equivale, mas é menos eficiente, o que você está fazendo é invertendo
os bits do valor duas vezes. O primeiro operador ~ força o contexto
escalar e inverte os bits, o segundo "desinverte".

> 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 :/

Veja a explicação no post anterior. No caso, é a lista que retorna a
contagem, caso esteja em contexto escalar, esse truque aí apenas força
o contexto primeiro de lista para obter os matches, depois escalar
para obter a contagem.

-- 
   Eden Cardim       Need help with your Catalyst or DBIx::Class project?
  Code Monkey                    http://www.shadowcat.co.uk/catalyst/
 Shadowcat Systems Ltd.  Want a managed development or deployment platform?
http://blog.edencardim.com/            http://www.shadowcat.co.uk/servers/


More information about the SaoPaulo-pm mailing list