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

I wrote a script to compare words from two files, counting the number of matches. The script worked in Windows, but when I moved the script to a Linux computer, it's no longer counting the words. It runs and produces the preliminary output (headers, etc.), but it has 0 counts for the matches. I used eq to compare strings, and then to double-check, I used regular expressions. Please let me know if you have any suggestions,
  • Comment on Comparing strings works in Windows but not Linux

Replies are listed 'Best First'.
Re: Comparing strings works in Windows but not Linux
by toolic (Bishop) on Nov 07, 2010 at 17:12 UTC
    Please let me know if you have any suggestions,
    Two:
    • Read perlport in addition to the documentation for any Perl built-in functions or modules you are using.
    • Show us your code, plus a small sample of your input data, your actual output and your desired output.
      The code is included below: foreach my $word (@words) { chomp($word); foreach my $posWord (@positiveWords) { chomp($posWord); if ( lc($word) eq $posWord) { $numPosWords++; last; } } foreach my $negWord (@negativeWords) { chomp($negWord); if ( lc($word) eq $negWord) { $numNegWords++; last; } } } The input files are lists of words, one word on each line. For example, the list of positive words would be: good excellent outstanding ...etc. The text file is a movie review file, written in paragraph form, and I have to find positive and negative words by comparing each word in the text file to the positive/negative lists.
Re: Comparing strings works in Windows but not Linux
by moritz (Cardinal) on Nov 07, 2010 at 17:24 UTC

    The two most common reasons are

    1. Different line endings: Windows uses CR-LF, Linux just LF
    2. Different character encodings: On Windows, CP-* and UTF-16LE are very often used, on Linux UTF-8 is used more often
    Perl 6 - links to (nearly) everything that is Perl 6.

      The code is included below:

      foreach my $word (@words) { chomp($word); foreach my $posWord (@positiveWords) { chomp($posWord); if ( lc($word) eq $posWord) { $numPosWords++; last; } } foreach my $negWord (@negativeWords) { chomp($negWord); if ( lc($word) eq $negWord) { $numNegWords++; last; } } }

      The input files are lists of words, one word on each line. For example, the list of positive words would be:

      good

      excellent

      outstanding

      The text file is a movie review file, written in paragraph form, and I have to find positive and negative words by comparing each word in the text file to the positive/negative lists.

        chomp will not be enough to remove whitespace at the end of the line if your text file was created on a Windows machine (or with Windows line endings) and is then used on a Unix machine (or with Unix line endings). Use a regular expression to strip all whitespace from the end of the line(s):

        $negWord =~ s/\s+$//;
Re: Comparing strings works in Windows but not Linux
by ikegami (Patriarch) on Nov 07, 2010 at 17:17 UTC

    Please let me know if you have any suggestions,

    There's a bug in your script. You don't say anything about your script. I'd say that would be the first thing to do.