<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-cite-prefix">El 30/07/15 a las 09:12, Toni Homedes i
Saun escribió:<br>
</div>
<blockquote cite="mid:55B9CE54.7060206@homedes.net" type="cite">Hola
JJ,
<br>
<br>
Para estar seguro lo he vuelto a probar así:
<br>
<br>
perl -e '$hr = {'A' => 1, 'B' => 2}; print "$a => $b\n"
while (($a, $b) = each $hr)' | head
<br>
<br>
y va bien, con lo que confirma que `each` acepta referencias a
hash. Lo que da la sensación es de que falle cuando en lugar de
una variable uses un literal: `each {A => ...`
<br>
<br>
Si no fuera porque no se lo bastante de Perl, parece que fuese un
bug de Perl en que
<br>
<br>
$hr = {..}; while (each $hr)
<br>
<br>
va bien y
<br>
<br>
while (each {...})
<br>
<br>
va mal.
<br>
<br>
Toni
<br>
</blockquote>
<br>
El poder usar referencias -no bendecidas- a hash o array en each()
(y otras funciones), es a partir de Perl v5.14.<br>
<br>
Es interesante lo que indicas, Toni. Si repetimos el experimento con
arrays, falla de la misma manera:<br>
<br>
<tt>$ perl -E 'use experimental "autoderef"; say "$a => $b" while
($a, $b) = each [ 2, 4, 6 ];' |head<br>
0 => 2<br>
0 => 2<br>
0 => 2<br>
0 => 2<br>
0 => 2<br>
0 => 2<br>
0 => 2<br>
0 => 2<br>
0 => 2<br>
0 => 2<br>
(bucle infinito)<br>
<br>
</tt>Esto huele a bug... Falla incluso en la última versión estable,
en la v5.22. Lo he probado también en v5.10, v5.18... y también
fallan.<br>
<br>
Según la documentación, en <b>perldoc -f each</b>,<br>
<br>
«Después de que "each" devuelva todas las entradas del hash o del
array, la siguiente llamada a "each" devuelve la lista vacía en
contexto de lista, y "undef" en contexto escalar; la <u>siguiente
llamada a </u><u>esta</u>, reinicia la iteración».<br>
<br>
El problema podría venir de ahí.<br>
<br>
<blockquote cite="mid:55B9CE54.7060206@homedes.net" type="cite">
<br>
El 30/07/15 a les 08:05, JJ Merelo ha escrit:
<br>
<blockquote type="cite">
<br>
<br>
2015-07-29 14:58 GMT+02:00 Toni Homedes i Saun
<<a class="moz-txt-link-abbreviated" href="mailto:toni@homedes.net">toni@homedes.net</a>
<br>
<a class="moz-txt-link-rfc2396E" href="mailto:toni@homedes.net"><mailto:toni@homedes.net></a>>:
<br>
<br>
Hola Mongers,
<br>
<br>
Fent un molinet amb Perl m'he trobat el següent:
<br>
<br>
<br>
Bé:
<br>
---
<br>
<br>
perl -e '%h = ('A' => 1, 'B' => 2); print "$a =>
$b\n" while (($a,
<br>
$b) = each \%h)' | head
<br>
<br>
Malament:
<br>
---------
<br>
<br>
perl -e 'print "$a => $b\n" while (($a, $b) = each {'A'
=> 1, 'B' =>
<br>
2})' | head
<br>
<br>
<br>
<br>
Perquè? Una referència a un hash no és sempre una referència
a un hash?
<br>
<br>
<br>
Asi a bote pronto, en el de arriba estás cerrando las comillas
simples
<br>
antes de la primera A. En el segundo, hum, también. Pero no creo
que sea
<br>
eso: en el segundo estás usando una referencia a hash {}; en el
primero
<br>
un hash ()
<br>
<br>
Saludos
<br>
<br>
JJ
<br>
<br>
<br>
<br>
_______________________________________________
<br>
llista dels Barcelona-pm
<br>
<a class="moz-txt-link-abbreviated" href="mailto:Barcelona-pm@pm.org">Barcelona-pm@pm.org</a>
<br>
<a class="moz-txt-link-freetext" href="http://mail.pm.org/mailman/listinfo/barcelona-pm">http://mail.pm.org/mailman/listinfo/barcelona-pm</a>
<br>
BCN Perl Mongers: <a class="moz-txt-link-freetext" href="http://barcelona.pm.org">http://barcelona.pm.org</a>
<br>
<br>
</blockquote>
_______________________________________________
<br>
llista dels Barcelona-pm
<br>
<a class="moz-txt-link-abbreviated" href="mailto:Barcelona-pm@pm.org">Barcelona-pm@pm.org</a>
<br>
<a class="moz-txt-link-freetext" href="http://mail.pm.org/mailman/listinfo/barcelona-pm">http://mail.pm.org/mailman/listinfo/barcelona-pm</a>
<br>
BCN Perl Mongers: <a class="moz-txt-link-freetext" href="http://barcelona.pm.org">http://barcelona.pm.org</a><br>
</blockquote>
<br>
</body>
</html>