return to first page linux journal archive
keywordscontents

Listing 5: simple-find-2.pl

#!/usr/bin/perl -w
use strict;
use diagnostics;
use File::Find;
# Get the pattern from the input list
my $pattern = shift @ARGV;
# Slurp up the entire contents of a file
$/ = undef;
print qq{Searching for "$pattern".\n};
# Invoke "find" with a reference to our subroutine,
# with the directories passed as arguments
find(\&find_matches, @ARGV);
sub find_matches
{
    my $filename = $_;
    # Open the file, and search through its
    # contents
    if (open FILE, $filename)
    {
	# Get the file
	my $contents = (<FILE>);
	# If there aren't any contents, then return
	# right away
	return unless $contents;
	# Print the filename, with the directory
	print qq{$File::Find::dir/$filename\n}
	    if ($contents =~ m|\b$pattern\b|is);
	close FILE;
    }
    else 
    {
	warn qq{Unable to open
	    "$File::Find::dir/$filename": $! };
	return;
    }    
}