in reply to Re: The Anomalous each()
in thread The Anomalous each()
Just thinking out loud here with some untested code...
This kind of reminds me of Writing Solid Code's rewrite of realloc. Any use of realloc would be "code smell" as well, so Steve Maguire diligently set out to prove it, then rewrite it safely. If it stinks so bad, what can we do to provide a safer version? The above is probably as good as it gets without XS code. Perhaps if someone has a Hash::Util module to stick this into... Anyway, just because a language comes with a function doesn't mean it's always the best. At the time, each was probably quite nifty. So was realloc. Hindsight is 20/20, and now we probably know better. Which is why, as I recall, perl 6 will do this just a wee bit differently.sub each_iter(%) { my $hash = shift; my @keys = keys %$hash; sub { my $nkey = shift @keys; $nkey => $hash->{$nkey}; } } my $iter = each_iter(%some_hash) while (my ($k, $v) = $iter->()) { # do stuff }
Update: I agree with Aristotle that it's not even close to ideal. However, I'm not sure it's "not very helpful". For small hashes (for some definition of small which may depend on free memory), it can indeed be incredibly helpful: you can run the each iterator inside itself - i.e., two loops that absolutely must run inside each other. You can't do this without taking a copy of the keys anyway, so this provides the syntactical sugar to do it the each way that you want. It also provide a small-change to existing code (create the iterator on the previous line, change the each call to $iter->()) which you want to get working quickly. It means you can get going again quickly. Personally, I almost never use each to begin with - probably from this exact same problem. So it's not as helpful to me, but I could see reasons to use this function.
Besides - I put it out there more to try to prompt someone with the XS skills to try it than to propose it as a "good" solution".
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: The Anomalous each()
by Aristotle (Chancellor) on Nov 19, 2005 at 06:28 UTC | |
|
Re^3: The Anomalous each()
by Aristotle (Chancellor) on Nov 19, 2005 at 11:10 UTC | |
by Tanktalus (Canon) on Nov 19, 2005 at 15:49 UTC | |
by Aristotle (Chancellor) on Nov 19, 2005 at 16:13 UTC |