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

I am trying to get this hash working to count each case of the words The, Hi, and Linux (regardless of punctuation.) Here is my code.
#! /usr/bin/perl -w open "/home/words"; $hashvar1 {The} = "the"; $hashvar1 {Hi} = "hi"; $hashvar1 {Linux} = "linux"; @arrayhash1 = %hashvar1; say "@arrayhash1";
can you give me any pointers?

Replies are listed 'Best First'.
Re: hash help
by davido (Cardinal) on Sep 11, 2012 at 20:20 UTC

    On line 2 you're not using open correctly, and not checking the return value for success (see perlopentut). You never read from a file at all. The rest accomplishes nothing useful.

    Almost everything you need to accomplish this task is addressed in perlintro. Here is a solution expressed as a one-liner (which would also require reading a little from perlrun and perlrequick):

    perl -nE '$count{$1}++ while /\b(the|hi|linux)\b/ig; END{say "$_ => $c +ount{$_}" for keys %count}' filename.txt

    As a full script, it might look like this:

    #!/usr/bin/perl open $fh, '<', $ARGV[0] or die $!; while( <$fh> ) { $count{$1}++ while /\b(the|hi|linux)\b/ig; } print "$_ => $count{$_}\n" for keys %count;

    Run it as:

    $ ./scriptname filename.txt

    Update: It would have been polite to let us know you are following up to the question you asked here: Help with accepting inputs, wordcount, and print to a file, if for no other reason than to provide us with that additional context.


    Dave

Re: hash help
by ww (Archbishop) on Sep 11, 2012 at 22:16 UTC
    Great data structures for what must be a wonderful language     ...   I think?

    But have you written the language yet? If so, what's it called and where can we read about it?

    To progress with Perl, you really need to read a primary text ("Learning Perl" leaps to mind) because, as a wise person once said, 'You can't just make stuff up and expect the computer to understand.'

    And, as various Monks have observed, it's well to acknowledge the fact when you're asking for help with homework.