On Fri, 2009-03-20 at 11:07 -0700, John W. Krahn wrote:
> Martin Spinassi wrote:
> > Hi list!
> 
> Hello,
> 
> > I've just started with perl, but I'm really excited about its power.
> 
> I'm excited that you're excited!  ;-)

I'm excited because you are excited because I'm....or....you.....
doesn't mind :-D

[snip]

> > Is there any way to open a file for input and output at the same time?
> 
> perldoc -f open
> 
> [ snip ]
> 
>          You can put a '+' in front of the '>' or '<' to indicate that
>          you want both read and write access to the file; thus '+<' is
>          almost always preferred for read/write updates--the '+>' mode
>          would clobber the file first.  You can’t usually use either
>          read-write mode for updating textfiles, since they have variable
>          length records.  See the -i switch in perlrun for a better
>          approach.  The file is created with permissions of 0666 modified
>          by the process’ "umask" value.
> 
> 
> > This is just and example, and doesn't work, but may be it explains
> > better what I'm trying to do:
> > 
> > 
> > while (glob "*.dump") {        #I know there is not a "<>" 
> >        open (TMPFILE,"<&>", $_) or die "Could not open file $_: $!\n";
> > 
> >        while (<TMPFILE>) {
> >                 s/^--.*//;
> >                 print;
> >         }
> > }
> 
> Your best bet is probably to read the entire file into memory, modify 
> it, and then write it back out.  Something like this (UNTESTED):
> 
> use Fcntl ':seek';
> 
> while ( my $file = glob '*.dump' ) {
>      open my $TMPFILE, '+<', $file or die "Could not open file $file: $!\n";
>      local $/;
>      my $data = <$TMPFILE>;
>      $data =~ s/^--.*//gm;
>      seek $TMPFILE, 0, SEEK_SET or die "Could not seek file $file: $!\n";
>      print $TMPFILE $data;
>      truncate $TMPFILE, length $data;
>      }
> 
> 
> Other methods would include using Tie::File or one of the mmap modules. 
>   For example:
> 
> use Tie::File;
> 
> while ( my $file = glob '*.dump' ) {
>      tie my @data, 'Tie::File', $file or die "Could not open file $file: 
> $!\n";
>      s/^--.*// for @data;
>      untie @data;
>      }
> 
> 
> 
> 
> John
> -- 
> Those people who think they know everything are a great
> annoyance to those of us who do.        -- Isaac Asimov
> 


Wow! those looks pretty complicated (to me, of course, and anything
beyond "Hello world" is by now). You just make me curious about "untie",
"Fcntl ':seek'", "seek", and "truncate". I'll test them (and probably
back here) and tell you how is it going! ;-)


Thanks John

Cheers

Martín


-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to