in reply to A brain twister? (how to make 2 lines->1)
When I find myself being too clever (or find that I have been too clever in a previous version of code), I try to simplify it. If I don't, I find myself spending way too much time trying to understand the clever code I wrote yesterday (or last week / month / year), and wanting to go back and smack some sense into myself.
push @{$outp}, sprintf '"%s"=>"%s"', @$_ foreach @{&{ sub ($) { my $_=["",[]]; push @{$_->[1]},\@{$_->[0]} while @{$_->[0]=[each $_[0]]}; $_->[1] } } (\%ahash)}, @{$v};
There is a lot packed into that code example that could probably be made more understandable, at the very least, with some whitespace.
push @{$outp}, sprintf '"%s"=>"%s"', @$_ foreach @{&{ sub ($) { my $_=["",[]]; push @{$_->[1]}, \@{$_->[0]} while @{$_->[0]=[each $_[0]]}; $_->[1] } } (\%ahash)}, @{$v};
although, in this case, I would probably give it some more care and feeding than just whitespace. Specifically (assuming that I am understanding what you are attempting to do), I would look at using map (map { sprintf... } along with keys instead of the foreach structure that you have.
Assuming that I am understanding your intent (which I still may not have grokked), does this do what you are attempting?
push @{$outp}, ( map { sprintf '"%s"=>"%s"', $_, $ahash{$_}; } keys $ahash, ), @{$v};
Just my $0.02
--MidLifeXis
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: A brain twister? (how to make 2 lines->1)
by perl-diddler (Chaplain) on Jun 27, 2012 at 09:09 UTC | |
by MidLifeXis (Monsignor) on Jun 27, 2012 at 13:18 UTC | |
by perl-diddler (Chaplain) on Jun 27, 2012 at 23:30 UTC |