my $keys = '1 2 3 4 5 6'; # this splits your input data and stores the split # up elements in an array # So @key_list ends up containing # (1, 2, 3, 4, 5, 6) my @key_list = split /\s+/, $keys; # Here's where it gets interesting. # The map block is called once for every element in # the input list and returns the list that is created # by the block. # In this case each element is converted to a two-element # list, where the first element is taken from @key_list # and the second element is the value "undef". So, for # example, the first element from @key_list returns the # two-element list (1, undef). All of this little lists # are stored together in @mapped_list. So @mapped_list # will contain: # (1, undef, 2, undef, 3, undef, 4, undef, # 5, undef, 6, undef) my @mapped_list = map { $_ => undef } @key_list; # And finally we use standard list assignment to assign # our array to a hash. The even indexed elements (indexes # 0, 2, 3, etc) become the keys and the old indexed # elements (1, 3, 5, etc) become the values. # It's just like doing: # %hash = (1 => undef, 2 => undef, 3 => undef, ...) my %hash = @mapped_list;