<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">&gt; perl -e &#39;$x = 10; while ($x) { $x= ~-$x; print &quot;$x\n&quot; }&#39;<br>


&gt;<br>
&gt; Código alternativo para contagens regressivas.<br>
&gt; &quot;~-$x&quot; decrementa $x desde que $x seja diferente de 0. Por extenso, seria<br>
&gt; &quot;(~(-$x))&quot;.<br>
<br>
</div>perl -le&#39;print for reverse 0..10&#39;<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>
&gt; perl -le &#39;print ~~localtime&#39;<br>
&gt;<br>
&gt; &quot;~~&quot; força o contexto escalar. No caso do &quot;localtime&quot;, que retorna array no<br>
&gt; contexto &quot;normal&quot;, porém retorna string no contexto escalar, vai retornar a<br>
&gt; data e a hora por extenso. No caso do array, retorna o seu último elemento.<br>
&gt; Me arrisco a dizer que equivale ao velho e bom &#39;scalar&#39;.<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 &quot;desinverte&quot;.<br>
<div class="im"><br>
&gt; perl -lne &#39;$s+ =()= /\S+/g }{ print $s&#39;<br>
&gt;<br>
&gt; &quot;=()=&quot;, sucedido de um array, retorna o número de elementos no mesmo. Por<br>
&gt; extenso, são tantos parenteses que parece o Lisp; nem me arrisco a tentar<br>
&gt; 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, &quot;$s +=()= /\S+/g&quot; 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 (&lt;flame_warning&gt;quem quer algo legível que programe em Python&lt;/flame_warning&gt;); trata-se do &quot;There&#39;s more than one way to do it&quot;. 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 &quot;$hashref = { some_key =&gt; $string =~ /(\d+)/ &amp;&amp; $1 }&quot;! Tô pensando em como juntar com um &quot;map&quot; para fazer &quot;micro-Getopt&quot; ;)<br></div></div>