in reply to Re^2: I fear my code is unreadable
in thread I fear my code is unreadable

Well, you could go with

use constant PADDING => 2; my $col_width = PADDING + ( sort { $b <=> $a } map { length } keys %list, map { @$_ } values %lists )[ 0 ]; ## Longest key or value

But in

use constant PADDING => 2; my $col_width = PADDING + ( sort { $b <=> $a } map { length } map { ref ? @$_ : $_ } %lists )[ 0 ]; ## Longest key or value

The line ref eq 'ARRAY' ? @$_ : $_ just says: if it($_) is a value (array) flatten it to a list, (which you already had in your own version), or if it is a key, pass it through untouched.

That avoids having to treat the keys and values separately, (and iterate the hash twice to generate them). In doing so it reduces the noise level a little further.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
"Too many [] have been sedated by an oppressive environment of political correctness and risk aversion."

Replies are listed 'Best First'.
Re^4: I fear my code is unreadable
by Boldra (Curate) on May 06, 2008 at 15:46 UTC
    I've adopted it because I saw it saves a loop iteration. The second version there is now actually broken. It works if you add parens, so: ref () ? @$_ : $_


    - Boldra