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
In reply to Re: A brain twister? (how to make 2 lines->1)
by MidLifeXis
in thread A brain twister? (how to make 2 lines->1)
by perl-diddler
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |