Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re: Using Number Ranges in a Dispatch Table

by afoken (Chancellor)
on Feb 18, 2012 at 18:46 UTC ( [id://954780]=note: print w/replies, xml ) Need Help??


in reply to Using Number Ranges in a Dispatch Table

The map trap. Run this:

#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my %oops=( A => 1, map { $_ => 2 } ('B','C'), map { $_ => 3 } ('D','E'), F => 4, ); print Dumper(\%oops);

Look at the output. Then add ( ) around each map expression:

#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my %oops=( A => 1, (map { $_ => 2 } ('B','C')), (map { $_ => 3 } ('D','E')), F => 4, ); print Dumper(\%oops);

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)

Replies are listed 'Best First'.
Re^2: Using Number Ranges in a Dispatch Table
by planetscape (Chancellor) on Feb 18, 2012 at 19:32 UTC

    Bless you!

    I thought the technique itself should be sound, and the solution something simple, but I didn't realize it would be this simple!

    Thanks!

    HTH,

    planetscape
      No need to double up on the parentheses
      (map { $_ => 2 } 'B','C'), (map { $_ => 3 } 'D','E'),
        If we're being nitpicky :) no need to create a lexical block for map:
        $ perl -Mstrict -MData::Dumper -we'my%h=( (map +($_=>2), "B","C","D"), + one=>1 ); print Dumper(\%h)' $VAR1 = { 'one' => 1, 'D' => 2, 'C' => 2, 'B' => 2 };
Re^2: Using Number Ranges in a Dispatch Table
by oko1 (Deacon) on Feb 19, 2012 at 17:06 UTC

    But isn't this always the case when you're dealing with statements that take lists as arguments?

    # Ooops! print join ",", @foo, "\n"; # Ooops! print grep /o/, @foo, "Hello world!\n"; # Ooops! print table{ map { tr(td($_->[0]), td($_->[1])) } @foo, ...

    My rule of thumb is, if one of these statements is followed by anything besides its argument, then parenthesize that statement's entire argument list.

    # De-oopsed. print join(",", @foo), "\n"; print grep(/o/, @foo), "Hello world!\n"; print table{ map({ tr(td($_->[0]), td($_->[1])) } @foo), ...
    -- 
    I hate storms, but calms undermine my spirits.
     -- Bernard Moitessier, "The Long Way"

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://954780]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others studying the Monastery: (2)
As of 2025-07-16 02:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.