Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

Re: A brain twister? (how to make 2 lines->1)

by muba (Priest)
on Jun 25, 2012 at 02:08 UTC ( #978103=note: print w/replies, xml ) Need Help??

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:\ line 6. Execution of G:\ 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

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://978103]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (3)
As of 2018-04-21 18:01 GMT
Find Nodes?
    Voting Booth?