#!/usr/bin/env perl use strict; use warnings; # Search files in directory and all subdirectories. sub list_files { my $dir = shift @_; opendir my($dh), $dir or die "Cannot open directory '$dir': $!"; my @dir = map { "$dir/$_" } grep { !/^\.\.?$/ } readdir $dh; closedir($dh); my @files; my @dirs = grep { -d "$dir/$_" } @dir; push @files, grep { -f "$dir/$_" } @dir; push @files, list_files($_) for @dirs; return @files; } # Return usage sub usage { "Usage: ./findwords.pl \n"; } die usage unless defined @ARGV; die usage unless scalar @ARGV == 2; my %matches; for my $file (list_files $ARGV[0]) { open FILE, $file or print STDERR "Cannot not open file '$file': $!"; while () { my @m = m/\W($ARGV[1])\W/; $matches{$_} = 1 for @m; } } print "$_\n" for keys %matches; print "\n------------------\nSum: ", scalar keys %matches, "\n";