Thank you so much for spelling it out for me.  I learned a lot!  ...BTW your
"--Untested--" worked great! :~)

Brian 

> -----Original Message-----
> From: Wiggins d'Anconia [mailto:[EMAIL PROTECTED]
> Sent: Friday, February 11, 2005 1:31 PM
> To: Brian Volk
> Cc: Beginners (E-mail)
> Subject: Re: write new file to same dir
> 
> 
> Brian Volk wrote:
> > 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>
> 
> 
> 

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>

Reply via email to