<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="im">> perl -e '$x = 10; while ($x) { $x= ~-$x; print "$x\n" }'<br>
><br>
> Código alternativo para contagens regressivas.<br>
> "~-$x" decrementa $x desde que $x seja diferente de 0. Por extenso, seria<br>
> "(~(-$x))".<br>
<br>
</div>perl -le'print for reverse 0..10'<br></blockquote><div><br>Pois isso, sim, seria totalmente ineficiente e é um caso onde o velho e bom for($i=10;$i;$i--) seria o mais apropriado em todos os sentidos :)<br> </div>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div class="im"><br>
> perl -le 'print ~~localtime'<br>
><br>
> "~~" força o contexto escalar. No caso do "localtime", que retorna array no<br>
> contexto "normal", porém retorna string no contexto escalar, vai retornar a<br>
> data e a hora por extenso. No caso do array, retorna o seu último elemento.<br>
> Me arrisco a dizer que equivale ao velho e bom 'scalar'.<br>
<br>
</div>Equivale, mas é menos eficiente, o que você está fazendo é invertendo<br>
os bits do valor duas vezes. O primeiro operador ~ força o contexto<br>
escalar e inverte os bits, o segundo "desinverte".<br>
<div class="im"><br>
> perl -lne '$s+ =()= /\S+/g }{ print $s'<br>
><br>
> "=()=", sucedido de um array, retorna o número de elementos no mesmo. Por<br>
> extenso, são tantos parenteses que parece o Lisp; nem me arrisco a tentar<br>
> entender :/<br>
<br>
</div>Veja a explicação no post anterior. No caso, é a lista que retorna a<br>
contagem, caso esteja em contexto escalar, esse truque aí apenas força<br>
o contexto primeiro de lista para obter os matches, depois escalar<br>
para obter a contagem.<br></blockquote><div><br>In fact, "$s +=()= /\S+/g" por extenso seria:<br><br>($c = (<br> () = (/\S+/g)<br> )<br>);<br>$s += $c;<br><br>Veja bem Eden, a questão que levantei não é a eficiência (quem quer algo eficiente que faça em assembly) nem a legibilidade (<flame_warning>quem quer algo legível que programe em Python</flame_warning>); trata-se do "There's more than one way to do it". Assumi abertamente que os meus atalhos são *toscos*, mas cada um postando uma gambiarrinha de estimação todos nós aprendemos um pouco de Perl :D<br>
<br>P.S. - curti pacas o "$hashref = { some_key => $string =~ /(\d+)/ && $1 }"! Tô pensando em como juntar com um "map" para fazer "micro-Getopt" ;)<br></div></div>