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

Replies are listed 'Best First'.
Re: Array Element Occurence
by btrott (Parson) on Sep 12, 2000 at 10:57 UTC
    I'm not sure that this line:
    @xcounits=[C0,C1,C2,C3,C5,C6,C7,C8,C9,D0,D2,D3, D5,D6,I0,I2,I3,L0,L1,L3,A3,A5,A8,A9];
    is doing what you think it is. Presumably you're trying to create an array containing those elements. That's not what you did. You created an array with one element: a reference to an array which contains those elements. You want parens, not square brackets:
    @xcounits=(C0,C1,C2,C3,C5,C6,C7,C8,C9,D0,D2,D3, D5,D6,I0,I2,I3,L0,L1,L3,A3,A5,A8,A9);
    This will fix the problem where your code is printing that ARRAY(...) stuff. That means that you're printing out an array reference.

    I honestly don't know how this is going to affect the main "purpose" of your program, because for the life of me I can't figure out what that is. :)

Re: Array Element Occurence
by turnstep (Parson) on Sep 12, 2000 at 14:39 UTC
    Use a hash...it's good at counting arbitrary numbers of arbitrary things:
    my $recordfile = "/foo/bar/copy.txt"; my %record; open (FILE, "$recordfile") or die "Can't open $recordfile: $!\n"; while(<FILE>) { if (/^(..)/) { $record{$1}++; } } print "The Total number or records = $.\n\n"; for (sort keys %record) { print "$_ reports $record{$_} records.\n"; } ## Or, to output the records from fewest to most: for (sort {$record{$a} <=> $record{$b} or $a cmp $b} keys %record) { print "$_ reports $record{$_} records.\n"; }
          While you are getting into the swing of things, make sure you use use strict; at the top of your program.

          The program you posted will then complain horribly about barewords (ooooh nakidity ;-) which are useful when writing perl poetry, but not in my experience when you are writing code you ever want to look at again!

          TIMTOWDI of course, but that is my way!