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


in reply to Re^2: hash array
in thread hash array

I think McA pretty much got it nailed. Let me tell you what is going on.
  1. @clk_array = %clock_sheet; will flatten the hash as a list in the form (key1, value1, key2, value2, ...). You either want just the keys, or just the values. For which, duh, keys and values could be very useful. Like:
    @clk_array = keys %clock_sheet;
    or
    @clk_array = values %clock_sheet;
  2. You magically expect "@clk_array\-name" to distribute the suffix "-name" across each element. But instead the string will take each value from the array, and join them with the current value of $" which is a space by default, and then append the suffix to the whole.

    To distribute the suffix over every element, you can use map:

    @clk_with_suffix = map "$_-name", @clk_array;

Replies are listed 'Best First'.
Re^4: hash array
by McA (Priest) on Oct 09, 2012 at 11:38 UTC
    A ++ for the explanation.
Re^4: hash array
by Anonymous Monk on Oct 09, 2012 at 11:54 UTC
    thanks my issue got solved .... can u please explain about "map"
      map is a looping function to apply an expression or a block to every item in a list (each item in turn assigned to $_), and collect/return the list of results. It's like:
      my @results; foreach(@_) { push @results, &$CODE(); } return @results;
      where $CODE is the expression (delimited by a comma) or block (no delimiter) in the first argument.

      example:

      @output = map $_*2, 1 .. 10;
      which is identical in result to
      @output = map { $_*2 } 1 .. 10;
      and which return the even numbers from 2 to 20; the double of all numbers between 1 and 10.

      Please have a look at perldoc -f map. If there's something you don't understand, allmost everyone will help you.