On Sep 16, Johnson, Shaunn said:
>* gets a list of files
>* opens the files with a 'foreach $f(@list)'
>* does a 'while <> { ... } close (FILE)'
>
>The script works, but if I run it, it loops
>continually and edits (then re-edits) the files.
>I think I could use a lock file to do until I
>get a particular file, but I'm not sure how
>to go about it - at the same time, it may not be
>the more productive way to go.
Your code is doing too much work.
>my @list = grep {/\.txt/ } readdir(DIR) or die "Can not read the dir\n";
This creates the list of files.
>foreach $file(@list) {
>open (FILE, $file) or die "can not open this file: $!";
>
>local $^I=".bak"; # to keep a backup of the files
> # set to "" if i don't want backups
>local @ARGV = @list; # the files to work on
Perhaps you mean
local @ARGV = $file;
instead.
> while (<>) {
> s!$pattern!$new_ptrn!g ;
> print;
> } # end while loop
> close (FILE);
>} #end of for loop
Better yet, remove the for loop. I'll show the code in a moment.
>close (DIR);
That should be closedir().
You can do this without opendir(), and without grep() or the for loop.
{
local $^I = ".bak";
local @ARGV = glob "$directory/*.txt";
while (<>) {
s/foo/bar/g;
print;
}
}
Ta da!
--
Jeff "japhy" Pinyan [EMAIL PROTECTED] http://www.pobox.com/~japhy/
RPI Acacia brother #734 http://www.perlmonks.org/ http://www.cpan.org/
<stu> what does y/// stand for? <tenderpuss> why, yansliterate of course.
[ I'm looking for programming work. If you like my work, let me know. ]
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]