On Mon, 12 Apr 2010 21:06:58 -0500, Owen Chavez wrote: > I have a pattern matching question using Perl 5.10, Windows 7. Suppose > I have a file containing the following block of text: > > Hello there TODD > I my We Us ourselves OUr I. > > The file has 10 words, including 7 first-person pronouns (and 3 > non-pronouns that I have no interest in). > > I've scrabbled together the following code: > > #!/usr/bin/perl > use strict; > use warnings; > > my @prnouns1 = qw(I we me us myself ourselves mine ours my our); > > ... > > while (my $line = <>) > { > chomp $line; > my @strings = split /\s+/, $line; > my @words = grep /\w+/, @strings; > my $n_words += scalar(@words); > $fst_prsn += scalar (grep {my $comp1 = $_; grep {$_ =~ /\b$comp1\b/ig} > @words} @prnouns1); > } > print "Result: Number of words: $n_words - First: $fst_prsn\n"; > > The result produced by this code is incorrect:
The result is correct, it's the code that is incorrect :-) > Result: Number of words: 10 - First: 6 > > It's not counting the second "I" although I've included the /g modifier. > Can anyone tell me why? How can I accomplish this? First, it helps if you post a complete working example. Yours isn't; $n_words isn't in scope when you print it. Second, you seem to be very fond of the grep function, but I don't think you understand what it is for or how it works. It is not identical to the Unix utility. Your problem is that when the result of the outer block is a list containing more than one element, you seem to think that should somehow let through more than one element from the list being passed in. You will not get more elements out of grep than you put in. Third, you would achieve the goals of this code much more understandably if you used a hash. If you don't know what hashes are, now is the time to learn. -- Peter Scott http://www.perlmedic.com/ http://www.perldebugged.com/ http://www.informit.com/store/product.aspx?isbn=0137001274 http://www.oreillyschool.com/courses/perl1/ -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/