in reply to Re^4: Creating a whitelist
in thread Creating a whitelist

Okay Monks,

I'm still working on this. I thought I had it working, but this just doesn't work. The following sub looks right to me, but the "if" statement is not triggered.

sub filter_good_orgs { print "Content-type: text/html\n\n"; $SQL7 = "SELECT * FROM badwords"; &Do_SQL7; $pointer7 = $sth7->fetchrow_hashref; $goodorg = $pointer7->{'goodorgs'}; $lc_org = lc($organization); @orgs = split /\n/,$goodorg; foreach $goodorg (@orgs) { print "Word: $goodorg, Org: $lc_org Found: $found<br>"; if ($lc_org =~ /$goodorg/i) { $found = 1; } } print "<br>Found: $found<br>"; if (!$found) { &error_suspect_org; } return; } # end filter_good_orgs subroutine
Good org words are listing in the database, one per line:
first national bank
The above code returns the following when the organization is First National Bank:
Word: first , Org: first national bank Found: Word: national , Org: first national bank Found: Word: bank , Org: first national bank Found: Found: Content-type: text/html
Even if I switch the "if" statement around, it doesn't work.
if ($goodorg =~ /$lc_org/i) { $found = 1; }

Replies are listed 'Best First'.
Re^6: Creating a whitelist
by htmanning (Friar) on Jun 17, 2016 at 01:00 UTC
    Alright, I finally got it to work (I think) by placing this inside the foreach loop.
    $goodorg =~ s/\n//g; $goodorg =~ s/\r//g;

      Hi htmanning,

      Sounds like the list in the DB is separated by CRLF (Windows style) instead of just LF (*NIX style). Two other ways you could fix it are by writing your split as split /\r?\n/, $goodorg; (handles CRLF and LF), and/or by trimming whitespace off each string via $goodorg=~s/^\s+|\s+$//g;.

      I find the fastest way to see problems like this is by using Data::Dumper with its Useqq option:

      use Data::Dumper; $Data::Dumper::Useqq=1; print Dumper($goodorg); __END__ $VAR1 = "Company\r\nLLC\r\n";

      Hope this helps,
      -- Hauke D