in reply to Re: Counting instances in a hash from an array
in thread Counting instances in a hash from an array

Thanks to all for their input.
My text file is in the format
print OUTLET "$count\t $_";
Which gives me
81, galileo measur us newton basi law motion 45, galileo experi bodi roll slope act same forc weight effect make co +nstantli speed up 50, show real effect forc chang speed bodi set move previous thought 45, meant bodi act forc keep move straight line same speed
When fed into an array it does not give me the input suggested by "Grandfather".
I'm not sure how to get qw function syntax placed correctly.
Again many thanks for all help give.
my @UnNum = ( [35, [qw(forc two bodi twice strong on bodi sai bodi mass)]], [39, [qw(you expect on think new bodi made two bodi origin)]], [60, [qw(attract bodi b origin force)]], [46, [qw(total forc b twice origin force)]], [34, [qw(sai on bodi twice mass three time mass forc six)]], [17, [qw(on now see why bodi fall same rate bodi twice)]], );

Replies are listed 'Best First'.
Re^3: Counting instances in a hash from an array
by GrandFather (Saint) on Mar 24, 2006 at 19:57 UTC

    You need to build the array from the input data. Note that this appends the data in a __DATA__ section following the code. To use an external file instead, open it and use the file handle in place of DATA in the while loop.

    Try this version:

    use strict; use warnings; use strict; use warnings; my %triggers; @triggers{qw(bodi forc twice mass acceler law)} = (1); my @UnNum; while (<DATA>) { chomp; next if ! /(\d+),/; push @UnNum, [$1, [split /\s+/]]; } for (@UnNum) { my $count = \$_->[0]; exists $triggers{$_} && ++$$count for @{$_->[1]}; } print join "\n", map {"$_->[0]: " . join ' ', @{$_->[1]}} @UnNum; __DATA__ 81, galileo measur us newton basi law motion 45, galileo experi bodi roll slope act same forc weight effect make co +nstantli speed up 50, show real effect forc chang speed bodi set move previous thought 45, meant bodi act forc keep move straight line same speed

    Prints:

    82: 81, galileo measur us newton basi law motion 47: 45, galileo experi bodi roll slope act same forc weight effect mak +e constantli speed up 52: 50, show real effect forc chang speed bodi set move previous thoug +ht 47: 45, meant bodi act forc keep move straight line same speed

    DWIM is Perl's answer to Gödel
      Thanks again for all your help.
      My output is now as below, I'm now getting the text lines in ok.
      81:81, galileo measur us newton basi law motion 45:45, galileo experi bodi roll slope act same forc weight effect make + constantli speed up 50:50, show real effect forc chang speed bodi set move previous though +t 50:50, meant bodi act forc keep move straight line same speed
      But it is not increasing the score. There must be a problem with the format of the trigger words. They were split on a space would a comma be better?

        The code I posted generated the output I posted and is clearly incrementing the count appropriately. IF you have code that behaves differently than that because you have editied the code, I'm not sure how I am supposed to diagnose the problem. Changing the seperator character will not fix a problem that you don't understand. Look at the changes you have made to use the code I provided in your context. Remember that the code was working and think about what may have been changed to break it.


        DWIM is Perl's answer to Gödel