http://qs321.pair.com?node_id=911427


in reply to Tricky regexp

Add error checking to your open statements. You are only referencing the filename and not the full path, so it can't find the file.

The following is how I'd clean up your script:

#!/usr/bin/perl #regexp.pl use File::Spec; use strict; use warnings; print "Gimme the address of the directory:\n"; chomp(my $folder = <>); print "What's the phrase you're looking for?\n"; chomp(my $find = <>); my @found; opendir my $dh, $folder or die "Can't open $folder: $!"; while (my $file = readdir($dh)) { next if $file =~ /^\.+$/; my $path = File::Spec->catfile($folder, $file); next if ! -f $path; open my $fh, $path or die "Can't open $path: $!"; my $data = do {local $/; <$fh>}; close $fh; if ($data =~ /\Q$find\E/i){ push @found, $file; } } close $dh; print "Your query was found in the following files:\n"; print "@found\n";