suvendra123 has asked for the wisdom of the Perl Monks concerning the following question:

This node falls below the community's threshold of quality. You may see it by logging in.
  • Comment on Not getting proper output in array write

Replies are listed 'Best First'.
Re: Not getting proper output in array write
by Corion (Patriarch) on Sep 30, 2023 at 08:51 UTC
    my {$HRT,$RD,$WR.$LL,$DC} = {0,1,2,3,4}

    Your code does not even compile. Please post a short, self-contained program that we can run.

Re: Not getting proper output in array write
by kcott (Archbishop) on Sep 30, 2023 at 15:15 UTC

    G'day suvendra123,

    As already pointed out by ++Corion, the code you posted does not compile. It has so many problems that I don't know where to start. If you post the actual code that produced your broken output, we can tell you where you went wrong. Please post that code, and any output, within <code>...</code> tags. Thankyou.

    These two lines produce the output that you seem to want, assuming '[1}' should in fact be '{1}'.

    $ perl -E ' my @a = qw{HRT RD WR LL DC}; say "bins $a[$_] = {", $_, "};" for 0 .. $#a; ' bins HRT = {0}; bins RD = {1}; bins WR = {2}; bins LL = {3}; bins DC = {4};

    Update: Originally, my code, and consequently the output, had 'bin'; I changed that to 'bins'.

    — Ken

Re: Not getting proper output in array write
by Marshall (Canon) on Sep 30, 2023 at 09:03 UTC
    I am not quite sure what you intend. If you want to associate a name with some numeric value, the Perl way is to use a hash. Below I used %namedValues. It appears that you also want to print the values in a particular order. The Perl way to have data in a particular order is to use an array. Below I used an array of names called @binNames.

    I initialized the hash of names to values using what is called a "hash slice". This allowed me to do the initialization all in one step. Then once again used the order of the @binNames array to access and print the hash keys and their values in the proper order.

    use strict; use warnings; my @binNames = qw(HRT RD WR LL DC); my @values = qw( 0 1 2 3 4); my %namedValues; @namedValues{@binNames}=@values; #a "hash slice" foreach my $name (@binNames) { print "bins $name = {$namedValues{$name}}\n"; #removed backslashes +as spotted by [hippo] } __END__ bins HRT = {0} bins RD = {1} bins WR = {2} bins LL = {3} bins DC = {4}
         print "bins $name = \{$namedValues{$name}\}\n";

      Why are the first two backslashes present? They seem to serve no purpose and just clutter the code.


      🦛

        Correct, removed. Don't know what I was thinking.
Re: Not getting proper output in array write
by BillKSmith (Monsignor) on Sep 30, 2023 at 18:50 UTC
    Marshall has provided an excellent solution (Re: Not getting proper output in array write) to your current problem. If this is what you really want, read no further. However, I hope that you, as a user of this forum, want help in learning to write such code yourself. You do not appear to understand the differences among the perl terms 'list', 'array', and 'hash'. It would help if you study the Perl documentation at Perl variable types. Post specific questions if you still need help.
    Bill