<div dir="ltr"><br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div><div><div>De lá pra cá, casos como esse geraram tanta discussão sobre qual seria o comportamento correto do smartmatch que muitas mudanças foram (e continuam sendo) feitas. Hoje o ~~ é controlado por uma dispatch table massiva chamada em tempo de execução com mais de 20 rotas recursivas (sim, recursivas) dependendo dos operandos. Você é capaz de dizer, por exemplo, o que acontece, ou o que deveria acontecer, quando fazemos %hash ~~ @array? Quer chutar, sem olhar o "perlop"? Nem eu</div>
</div></div></div></blockquote><div><br></div><div style>Desafio aceito. :)</div><div style><br></div><div style>Meu palpite era de que %hash ~~ @array retornaria true se todos os elementos do array estivessem no hash, e vice-versa. Obviamente estava errado: o verdadeiro significado é:</div>
<div style><br></div><div style>    "any ARRAY elements exist as HASH keys"<br></div><div style><br></div><div style>WTF? Em casos assim, acho melhor que a comparação gere um warning, ou mesmo uma exceção fatal.</div>
<div style><br></div><div style>Nesses casos é melhor ser explícito, e escrever algo como grep { exists $hash{$_} } @array; que é bastante claro.</div><div style><br></div></div>
</div></div>