http://www.perlmonks.org?node_id=978103


in reply to A brain twister? (how to make 2 lines->1)

I assume this is along the lines of what you were looking for?

use strict; use warnings; my %ahash=(one=>1, two=>2, three=>3, foo=>'$foo'); print join(", ", map { "'$_' => '$ahash{$_}'"} keys %ahash ), "\n"; __END__ 'three' => '3', 'one' => '1', 'foo' => '$foo', 'two' => '2'

Addendum: I've chosen to use single quotes for the output rather than double quotes, for the simple reason of keeping the output more or less copy/pastable (of course, copypastability gets lost as soon as a value is actually a reference, but if that is an issue I recommend something like Data::Dumper to you). Consider this template:

use strict; use warnings; my %ahash = ( # PASTE HASH CONTENTS BELOW ); print "'$_' => '$ahash{$_}', " for keys %ahash;
And you were to put in the output of my above script, it'd nicely print 'three' => '3', 'one' => '1', 'foo' => '$foo', 'two' => '2',. Had I used double quotes for the output of the original script and pasted its result into the template, I would've gotten some bothersome errors.
Global symbol "$foo" requires explicit package name at G:\x.pl line 6. Execution of G:\x.pl aborted due to compilation errors.

Why are array so much easier to print out than hashes...geez...
I beg to differ. Just remember to read elements in pairs.
use strict; use warnings; my %ahash=(one=>1, two=>2, three=>3); print join(", ", %ahash); __END__ three, 3, one, 1, two, 2