Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

hash array

by Anonymous Monk
on Oct 09, 2012 at 10:58 UTC ( #997975=perlquestion: print w/replies, xml ) Need Help??
Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

foreach (keys %clock_sheet) { $clk_name = $_; print "$clock_sheet{$clk_name}\n"; } print "$clock_sheet{$clk_name}_name\n";
###the print statement prints all the elements in an hasharray. the same print statement i want to put outside of the foreach-loop still i need to get the all elements in the hash array how to do that? i got one idea that is :#########
@clk_array = %clock_sheet; print"@clk_array\_name\n";
when i'm printing the above @clk_array all the elements are coming twice i want to print only once,also the extension _name in the print statement is coming for the last element only..... i want the extension for each element my output look like as clk1_name clk2_name clk3_name............. etc the output i'm getting is
clk1 clk1 clk2 clk2 ....... clk4 clk4_name
help me about this case...............

Replies are listed 'Best First'.
Re: hash array
by McA (Priest) on Oct 09, 2012 at 11:09 UTC

    I must admit that I don't understand the question completely, but is that what you want:

    print map { $_ . "_name\n" } values %clock;

    Best regards

      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
        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;

        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";
Re: hash array
by grizzley (Chaplain) on Oct 09, 2012 at 11:06 UTC

    Please use <code> tags around your code.

    And regarding your problem: @keys = keys %hash will put all keys from hash in the array. Duplicated entries are there possibly because in your hash you have key the same as value.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://997975]
Approved by Corion
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (5)
As of 2018-02-21 22:14 GMT
Find Nodes?
    Voting Booth?
    When it is dark outside I am happiest to see ...

    Results (288 votes). Check out past polls.