Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

Re^2: hash array

by Anonymous Monk
on Oct 09, 2012 at 11:20 UTC ( #997984=note: print w/replies, xml ) Need Help??

in reply to Re: hash array
in thread hash array

my question is : @clk_array = %clock_sheet print "@clk_array\-name\n"; i'm getting the output error as follows: 1)@clk_array having the same elements twice example: clk1 clk1 clk2 clk2 clk3 clk3 ........... it has to be clk1 clk2 clk3 ......... 2)the extension _name is coming for the last element only i want the extension for all the elements eg:clk1_name clk2_name clk3_name

Replies are listed 'Best First'.
Re^3: hash array
by bart (Canon) on Oct 09, 2012 at 11:33 UTC
    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;
      @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;
      A ++ for the explanation.
      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.


        @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.

Re^3: hash array
by McA (Priest) on Oct 09, 2012 at 11:27 UTC

    Hmm, we can't see what's in your %clock_sheet. What is 'clk1'. Is it a key or a value or both in %clock_sheet?

    Please show us the content of the %clock_sheet. You can achieve that by:

    use Data::Dumper; print Dumper(\%clock_sheet), "\n";
      $VAR1 = { 'CLK_DBU' => 'CLK_DBU', 'CLK_IC_LMI0' => 'CLK_IC_LMI0', 'CLK_IC_ODP' => 'CLK_IC_ODP', 'CLK_T2' => 'CLK_T2', 'CLK_T3' => 'CLK_T3', 'CLK_DIRT' => 'CLK_DIRT', 'CLK_T1' => 'CLK_T1', 'CLK_CPU_SYS' => 'CLK_CPU_SYS' };

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://997984]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (4)
As of 2017-08-17 04:15 GMT
Find Nodes?
    Voting Booth?
    Who is your favorite scientist and why?

    Results (280 votes). Check out past polls.