Tenho em mente que o <div>=()= </div><div>ou mais formatado:</div><div>$var = () = @array</div><div>Faz com que todo o conteudo do @array seja jogado nas variaveis undef,undef,... e </div><div>quando diz que um scalar = array, ele recebe o valor dos elementos da array. </div>
<font class="Apple-style-span" color="#CC0000">Me precipito a dizer que, como o perl não esta com strict, quando você faz:<br>$var = () = $ref_array<br>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</font><br>
<div><br></div><div><font class="Apple-style-span" color="#006600">Lendo melhor, lembrei que expressões regulares retornam listas dos groups.</font></div><div><br></div><div><br></div><div>--------</div><div><br></div><div>
Uma coisa que usos as vezes, em scripts mesmo é:</div><div><br></div><div>$string = "231 bla bla bla";</div><div><br></div><div>$num = $string =~ /(\d+)/ && $1;</div><div><br></div><div>Assim, quando há match, o valor ja vai direto pro $num, mas tambem pode ser escrito assim:</div>
<div><br></div><div>($num) = $string =~ /(\d+)/;</div><div><br></div><div>Agora to pensando porque faço com && as vezes....</div><div><br></div><div><intervalo de alguns segundos...></div><div><br></div><div>
Ah, lembrei:</div><div><br></div><div>$hashref = {</div><div> some_key => $string =~ /(\d+)/ && $1</div><div>}</div><div><br></div><div><br></div><div><br><div class="gmail_quote">2010/10/5 Stanislaw Pusep <span dir="ltr"><<a href="mailto:creaktive@gmail.com">creaktive@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">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 :)<br>
Seguem alguns snippets da minha "coleção":<br><br><br><code></code>perl '-F/\s+/' -lane '$s += $F[9] }{ print $s"' access.log<br><br>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:<br>
perl -le 'while (<>) { @F = split /\s+/; $s += $F[9] }; print "$s' access.log<br>
<br><br>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 "(~(-$x))".<br>
<br><br>perl -le 'print ~~localtime'<br><br>"~~" 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'.<br>
<br><br>perl -lne '$s+ =()= /\S+/g }{ print $s'<br><br>"=()=", 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 :/<br>
<br><br>perl -le '$x = 12345; $y = 67890; ($x!=$y)&&($x^=$y^=$x^=$y); print "$x $y"'<br>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;"<br>
<br><br>Alguém mais teria alguma idiossincrasia para compartilhar? :) <br><br>
<br>_______________________________________________<br>
SaoPaulo-pm mailing list<br>
<a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br></blockquote></div><br><br clear="all"><br>-- <br>Renato Santos<br><a href="http://www.renatocron.com/blog/" target="_blank">http://www.renatocron.com/blog/</a><br>
</div>