@word =~ m/\w{2}/i;
You have a pattern match in void context so whether or not it matched you are not doing anything with the result. The binding operator (=~) uses two scalar operands so the array is used in scalar context which means that if @word contains 7 elements then your pattern match is "7" =~ m/\w{2}/i;. Your pattern uses the \w character class which includes all upper and lower case letters so the use of the /i option is superfluous.
foreach my $word (@word) { if ($word =~ m/^[A-Z]/) { if ($word[0] ne "[Sidenote:") { $name = $word[0]." ".$word[1];
You are iterating through every element in @word and storing each in turn in the $word variable but you are always comparing only the first element of @word with "[Sidenote:" and assigning to $name only the first and second elements of @word every time.
It sounds like you probably want to use a pattern something like:
my @names = $letter =~ /\b[A-Z][a-zA-Z]+\s+[A-Z][a-zA-Z]+/g;
In reply to Re: Finding a capitalised pair of words in a text
by jwkrahn
in thread Finding a capitalised pair of words in a text
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |