Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

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

Comment on hash array
Select or Download Code
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.
Re: hash array
by McA (Curate) 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
    McA

      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

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

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://997975]
Approved by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (9)
As of 2014-11-29 00:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My preferred Perl binaries come from:














    Results (200 votes), past polls