On 12 March 2010 09:17, Uri Guttman <u...@stemsystems.com> wrote: >>>>>> "PP" == Philip Potter <philip.g.pot...@gmail.com> writes: > > PP> I found this code example on Stack Overflow to prettyprint a hash: > PP> (link: > PP> > http://stackoverflow.com/questions/2431032/how-to-print-a-key-value-using-the-perl-hases/2431139#2431139 > PP> ) > > you shouldn't be learning perl from that site!
I respectfully disagree. > PP> my %hash = (2009 => 9, 2010 => 10); > > see what happens when you have 3 or more pairs in that hash! > > PP> print join (" => ", each %hash), "\n" while <keys %hash>; > > try doing a perl one liner with -MO=Deparse and see what perl parses > that as. Great idea, although I don't see the need to do it as a one liner: > perl -MO=Deparse foo.pl use warnings; use strict 'refs'; my(%hash) = (2009, 9, 2010, 10); use File::Glob (); print join(' => ', each %hash), "\n" while defined($_ = glob('keys %hash')); foo.pl syntax OK > perl -E 'say while <keys %hash>' keys %hash So keys %hash is being treated as a string, not an expression, the keys function never gets called, and the loop executes twice, once with $_ = 'keys' and once with $_ = '%hash'. Truly horrible! Phil -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/