Você passou o hash como segundo parâmetro, meu caro... Então Perl vai montar o hash com o que vier no segundo parâmetro em diante...   <div><br></div><div>;-)</div><div><br></div><div>Cheers!<br><br><div class="gmail_quote">
Em 30 de junho de 2010 14:28, Rodrigo Mosconi (perl) <span dir="ltr">&lt;<a href="mailto:perl@mosconi.mat.br">perl@mosconi.mat.br</a>&gt;</span> escreveu:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Mas a associação % não é do tipo &quot;greedy&quot;?<br>
<br>
e se inverter os parametros?<br>
<br>
sub func {<br>
  my ($scalar, %hash) = @_;<br>
 # iara iara iara...<br>
<br>
};<br>
<br>
<br>
2010/6/30 Andre Carneiro &lt;<a href="mailto:andregarciacarneiro@gmail.com">andregarciacarneiro@gmail.com</a>&gt;:<br>
<div><div></div><div class="h5">&gt;<br>
&gt;<br>
&gt; Em 30 de junho de 2010 14:04, <a href="mailto:diogo86@gmail.com">diogo86@gmail.com</a> &lt;<a href="mailto:diogo86@gmail.com">diogo86@gmail.com</a>&gt;<br>
&gt; escreveu:<br>
&gt;&gt;<br>
&gt;&gt; Cleive,<br>
&gt;&gt;<br>
&gt;&gt; primeiro acho que você vai precisar tirar o protótipo &quot;()&quot; da<br>
&gt;&gt; definição da função, porque basicamente está dizendo que ela não<br>
&gt;&gt; recebe nenhum parâmetro.<br>
&gt;&gt;<br>
&gt;<br>
&gt; Hummm... mais ou menos. Veja mais detalhes em perlsub<br>
&gt; $ perldoc perlsub<br>
&gt; ou<br>
&gt; <a href="http://perldoc.perl.org/perlsub.html" target="_blank">http://perldoc.perl.org/perlsub.html</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; Nesse ponto ficaria:<br>
&gt;&gt;<br>
&gt;&gt; sub SubHashScalar { ... }<br>
&gt;&gt;<br>
&gt;&gt; Quanto a passar o hash, tenho a impressão de que é mais comum passar<br>
&gt;&gt; por referência, fazendo a chamada com \ na frente, assim:<br>
&gt;<br>
&gt; Acho que não é questão de ser comum ou não, o que se recomenda é que se<br>
&gt; passe por referência, exatamente para evitar os problemas que mencionei no<br>
&gt; e-mail anterior, e por outras questões como replicação de variáveis ,<br>
&gt; vazemento de memória e outras cositas...<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; SubHashScalar( \%hash, $scalar );<br>
&gt;&gt;<br>
&gt;&gt; E na hora de ler os parâmetros dentro da função:<br>
&gt;&gt;<br>
&gt;&gt; my ( $hashref, $scalar ) = @_;<br>
&gt;&gt;<br>
&gt;&gt; Ao acessar a referência dentro da função, ao invés de fazer<br>
&gt;&gt; $hash{chave} você acessa como $hashref-&gt;{chave}.<br>
&gt;&gt;<br>
&gt;&gt; Pra realmente fazer do jeito que você quer, sem ser por referência,<br>
&gt;&gt; acho que você vai precisar tirar o último parâmetro da lista e depois<br>
&gt;&gt; montar o hash:<br>
&gt;&gt;<br>
&gt;&gt; my $scalar = pop;<br>
&gt;&gt; my %hash = @_;<br>
&gt;<br>
&gt;<br>
&gt; Humm, acho que não. Fica bem mais complicado assim, na minha opinião...Além<br>
&gt; do mais ele deveria passar o hash como referência mesmo.<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; Isso porque quando você faz essa chamada:<br>
&gt;&gt;<br>
&gt;&gt; my %hash = ( foo =&gt; 1, bar =&gt; 2 );<br>
&gt;&gt; my $scalar = &#39;teste&#39;;<br>
&gt;&gt;<br>
&gt;&gt; SubHashScalar ( %hash, $scalar );<br>
&gt;&gt;<br>
&gt;&gt; É a mesma coisa que:<br>
&gt;&gt;<br>
&gt;&gt; SubHashScalar ( &#39;foo&#39;, 1, &#39;bar&#39;, 2, &#39;teste&#39; );<br>
&gt;&gt;<br>
&gt;&gt; De forma que estes parâmetros chegam como uma lista normal na variável @_.<br>
&gt;&gt;<br>
&gt;&gt; Quando você tenta acessar com my ( %hash, $scalar ) = @_; o Perl, pelo<br>
&gt;&gt; visto, vai tentando montar o %hash com base nos pares da lista, onde o<br>
&gt;&gt; primeiro item do par é a chave e o segundo item do par é o valor.<br>
&gt;&gt;<br>
&gt;&gt; Sendo assim, o seu último parâmetro vira uma chave do hash e, como não<br>
&gt;&gt; tem parceiro no par, o valor fica undef.<br>
&gt;&gt;<br>
&gt;&gt; Depois de montado o %hash, a associação da ( lista ) fica sem mais<br>
&gt;&gt; itens pra ler na @_, então $scalar fica como undef.<br>
&gt;&gt;<br>
&gt;&gt; Bem, não tenho certeza se o funcionamento interno é realmente esse,<br>
&gt;&gt; mas, por observação, acho que é assim que funciona.<br>
&gt;&gt;<br>
&gt;&gt; Resumindo: melhor passar por referência mesmo :P<br>
&gt;&gt;<br>
&gt;<br>
&gt; Apoiado!<br>
&gt; :D<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; Se tiver algum lugar onde precisa ter um hash, e não um hashref, você<br>
&gt;&gt; utiliza em %{ $hashref }, como em:<br>
&gt;&gt;<br>
&gt;&gt; foreach my $chave ( keys %{ $hashref } ) { ... }<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; abs,<br>
&gt;&gt; Diogo<br>
&gt;&gt;<br>
&gt;&gt; 2010/6/30 GmailPaqui &lt;<a href="mailto:cpaqui@gmail.com">cpaqui@gmail.com</a>&gt;:<br>
&gt;&gt; &gt; Caros, boa tarde!<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Estou tendo problemas para passar dois parâmetros para uma sub, um hash<br>
&gt;&gt; &gt; e um<br>
&gt;&gt; &gt; scalar.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; SubHashScalar(%hash, $scalar);<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; sub SubHshScalar () {<br>
&gt;&gt; &gt;     my (%hash, $scalar) = @_;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;     print &quot;@{[ %hash ]}\n&quot;;<br>
&gt;&gt; &gt;     printf &quot;Scalar: %s&quot;, $scalar;<br>
&gt;&gt; &gt; }<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; O parâmetro scalar não esta sendo configurado, se eu do um print no @_<br>
&gt;&gt; &gt; imprime o hash e o scalar.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; O que estou fazendo de errado?<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Obrigado.<br>
&gt;&gt; &gt; --<br>
&gt;&gt; &gt; Cleive Paqui<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; _______________________________________________<br>
&gt;&gt; &gt; Rio-pm mailing list<br>
&gt;&gt; &gt; <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
&gt;&gt; &gt; <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; Rio-pm mailing list<br>
&gt;&gt; <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
&gt;&gt; <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; André Garcia Carneiro<br>
&gt; Analista/Desenvolvedor Perl<br>
&gt; (11)82907780<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Rio-pm mailing list<br>
&gt; <a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
&gt; <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
&gt;<br>
_______________________________________________<br>
Rio-pm mailing list<br>
<a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>André Garcia Carneiro<br>Analista/Desenvolvedor Perl<br>(11)82907780<br>
</div>