Alan C. wrote at Thu, 07 Aug 2003 02:34:32 -0700:
> It's my .* attempt I don't understand, seek help on. (seek/need
> ability to either all files in dir opened or pattern search the files in
> dir with only files that meet pattern opened)
>
> [...]
>
> my $filspec = '.*'; # brings error: permission denied at line 18
>
> my $fildir = '/Programs/NOTETA~2/DOCUME~1';
> opendir(FILDIR,$fildir)|| die "can't open $fildir $!";
>
> my @fils = grep /$filspec/,readdir FILDIR;
Note that .* or .txt as a regular expression is different from the meaning
that it has in e.g. a dir command.
.txt stands for a pattern of 4 characters where the first one can be
anything (except a newline) and the three following are just txt.
E.g. atxt would match /.txt/.
Similar .* stands for a pattern of any character that occurs zero or more
often. E.g. an empty string (containing zero characters) _matches_ the
pattern.
In your case, I'd guess that also the pseudo directories "." and ".." are
readout by the readdir command what has of course to fail later.
I would emphasize to you to use the perl function glob.
my @file = glob("$filedir/$filespec");
what will work with
$filespec = "*.txt"; # Note that the star * is not redundant
# or
$filespec = "*.*";
Note also that with glob, the directory name is already in the elements of
@file.
For details, please read
perldoc -f glob
Your program should be able to rewritten as:
use strict;
use warnings;
my $pattern = '(?=.*\bmodule\b)';
my $filespec = '*.*';
my $filedir = '/Programs/NOTETA~2/DOCUME~1';
foreach my $file (glob "$filedir/$filespec") {
open(FILE,$file) or die "can't $!";
while (<FILE>) {
if (s/^H=($pattern)/$1/io) {
print "$file:$_" ;
}
}
close FILE;
}
Greetings,
Janek
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]