Listing 7. simple-cgi-find.pl
#!/usr/bin/perl -w
use strict;
use diagnostics;
use File::Find;
use CGI;
use CGI::Carp qw|fatalsToBrowser|;
# Which directory should start the search?
my $search_root = "/usr/local/apache/htdocs";
# Slurp up files in one fell swoop
undef $/;
# Create an instance of CGI
my $query = new CGI;
# Send a MIME header
print $query->header("text/html");
# Get the text pattern for which to search
my $pattern = $query->param("pattern");
# Make sure that $pattern is defined
unless ($pattern)
{
print $query->start_html(-title =>
"No pattern named");
print "<P>You must enter a pattern!</P>";
print $query->end_html;
exit;
}
# Start the HTML output
print $query->start_html(-title => "Search results");
print qq{<P>The following documents matched the
pattern "$pattern":</P>\n};
# Start an unordered list
print "<ul>\n";
# Search for
find(\&find_matches, $search_root);
# End an unordered list
print "</ul>\n";
print $query->end_html;
#-----------------------------------------
# Subroutine that searches through files for
# matches
sub find_matches
{
# Make sure that this is an HTML file
return unless m/\.html?$/i;
# Get the filename
my $filename = $_;
# Open the file, and search through its
# contents
if (open FILE, $filename)
{
# Get the file
my $contents = (<FILE>);
# Print the filename, with the directory
print qq{<li>$File::Find::dir/$filename\n}
if ($contents =~ m|\b$pattern\b|is);
close FILE;
}
else
{
warn qq{Unable to open "$filename": $! };
return;
}
}
Copyright © 1994 - 2019 Linux Journal. All rights reserved.