Hi All, I'm having trouble w/ my script... I can open the dir, read the dir and even
get the s/// to work.... I just don't know how to write the new file to a
new dir. .... or the same dir for that matter... If someone could point me
in the right direction I would really appreciate it. Maybe a page in the
Lama book... :~)
For now I will be (and you should consider) being very explicit. It will help you learn and see what is going on, rather than using Perl's shortcuts. Until you understand them they are really just rope to hang yourself with.
#!/usr/local/bin/perl
use strict;
use warnings;
Great start!
my $dir = "C:/brian/test_html";
opendir (HTML, $dir) or die "Can't open $dir: $!";
#my $newdir ="C:/brian/test_html_1";
# opendir (HTML1, $newdir) or die "Can't open $newdir: $!";
Normally you would not need to open a directory just to open a file for reading/writing, but in this case you clearly want a list of files so your opendir is the way to go.
# load @ARGV for <> operator below @ARGV = map { "$dir/$_" } grep { !/^\./ } readdir HTML;
Perl lets us make our own variables so lets do that instead,
my @files = map { "$dir/$_" } grep { !/^\./ } readdir HTML;
Additionally since we don't need the directory for anything else we can close it now rather than after the loop.
while (<>) {
chomp;
s/31990/31720/g;
print; }
Now we have a list of files, loop over them, open them, read and write to them, and then close them. Note that we can't open a file for read and write at the same time (well not easily).
-- Untested -- foreach my $file (@files) { my $READHANDLE; unless (open $READHANDLE, "$file") { print STDERR "Couldn't open $file for reading: $!"; next; } my $WRITEHANDLE; unless (open $WRITEHANDLE, ">$file.tmp") { print STDERR "Couldn't open $file.tmp for writing: $!"; next; } while (my $line = <$READHANDLE>) { $line =~ s/31990/31720/g; print $WRITEHANDLE $line; } close $WRITEHANDLE; close $READHANDLE;
# now move our temp file over top of the original
rename "$file.tmp", $file or die "Can't rename temp file to original: $!";
}
closedir (HTML);
___END
perldoc -f open perldoc perlopentut perldoc -f rename perldoc -f print
Of course then there is the easy, quick, safe way,
perldoc Tie::File
But ties are sometimes difficult to get your head around.
Brian Volk
HP Products
317.298.9950 x1245
<mailto:[EMAIL PROTECTED]> [EMAIL PROTECTED]
http://danconia.org
-- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>