I believe the point of "my" declarations is to simplify finding the "root" of a scoped variable. Variable scoping is an effect of command nesting; in your example the "$count{$word}" declaration is nested in the first foreach loop, which is within the scope of the "my $word" declaration and the "my %count" declaration (necessarily added by FunkyMonk). The variables have this scope because they are outside the loop. That means the variables are also available to the next foreach loop. Since the only one used is %count, you could write: foreach (@words) { my $word = $_; and the scope of $word would be limited to the nest where it is actually used.

Unfortunately, niether your nor FunkyMonk's code actually works properly because of "@words=<STDIN>". I am sure what you wanted to do was this:

#!/usr/bin/perl use warnings; use strict; chomp(my $input = <STDIN>); my @words = split / /,$input; my %count; foreach my $word (@words) { $count{$word} += 1; } foreach my $key (sort keys %count) { print "$key was found $count{$key} times\n"; }
Scoping and the purpose of the "my" declaration will become much clearer when you are writing longer, more complicated and more heavily nested scripts with subroutines, etc. Do stick with "use strict"

In reply to Re^3: Syntax error - "my" within foreach loop by halfcountplus
in thread Syntax error - "my" within foreach loop by Klammer

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.