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


in reply to Using map to create a hash/bag from an array

The idiomatic way to do that in Perl is @hash{qw(a b c)} = (1) x 3;:

use strict; use warnings; use Data::Dumper; my %hash; @hash{qw(a b c)} = (1) x 3; print Dumper (\%hash);

Prints:

$VAR1 = { 'c' => 1, 'a' => 1, 'b' => 1 };

DWIM is Perl's answer to Gödel

Replies are listed 'Best First'.
Re^2: Using map to create a hash/bag from an array
by bart (Canon) on Dec 18, 2005 at 10:45 UTC
    Except, IMHO, the hash values are irrelevant. Codewise, it's easier to use undef as hash values: your
    @hash{qw(a b c)} = (1) x 3;
    then becomes
    @hash{qw(a b c)} = ();

    That's a lot shorter, isn't it? And no need to count items.

      And faster too (making the obvious benchmark addition):

      Rate set map map++ GF Bart set 2288/s -- -84% -91% -92% -93% map 14566/s 537% -- -46% -48% -58% map++ 26756/s 1070% 84% -- -4% -23% GF 27881/s 1119% 91% 4% -- -19% Bart 34580/s 1412% 137% 29% 24% --

      See Re: Using map to create a hash/bag from an array for the original code


      DWIM is Perl's answer to Gödel