On Wednesday 03 May 2006 03:29 am, D. Bolliger wrote:
> tom arnall am Sonntag, 30. April 2006 22.57:
> [...]
>
> > OK, the above stuff is all good. And now I have another question. The
> > following code:
> >
> >     #!/usr/bin/perl -w
> >     use strict;
> >     use Tie::Scalar;
> >     use DB_File;
> >
> >     my ($f,@f,%f);
> >
> >     tie %f, "DB_File", "file.txt" ;
> >     $f{'a'}='aaaa';
> >     untie %f;
> >     %f = ();
> >     tie %f, "DB_File", "file.txt" ;
> >     @f = %f;
> >     print "
> >     @f";
> >
> >     tie $f,"Tie::StdScalar","scalar.txt","\$f";
> >     $f = 'a';
> >     untie $f;
> >     $f = '';
> >     tie $f,"Tie::StdScalar","scalar.txt","\$f";
> >     print "
> >     $f
> >     ";
> >
> >
> > produces:
> >
> >     a aaaa
> >     scalar.txt
>
> Hello tom
>
> Since I'm not enough experienced with tie'ing, I can only provide a very
> basic
>
> and hopefully correct answer:
> > shouldn't the second line be 'a', i.e., shouldn't 'StdScalar' work  along
> > the lines of the code handling the tied hash variable?
>
> When you look at the source of the Tie::StdScalar package, you can see that
> the TIESCALAR method just blesses a reference to the string 'scalar.txt' to
> the Tie::StdScalar class, FETCH gets the string, and STORE sets it.
> (further arguments, as "\$f" - the same as '$f' btw - above, are ignored).
>
> The class does not know that you want to treat 'scalar.txt' as a filename,
> and therefore no persistent storage is involved, and thus the change done
> by $f = 'a' is lost after untie'ing.
>
> > if this is not true,
> > is there a module that does work similarly to 'DB_File', i.e., one that
> > enables tie-ing a text file to a scalar?
>
> I don't know. Maybe you want to look at Tie::File to access the lines of a
> disk file via an array, search on search.cpan.org, or write your own
> subclass to get the desired behaviour (I can't see much sense in using
> Tie::StdScalar directly).
>
> Dani


I should have made clear my basic purpose in trying to use file-tied scalars. 
I wanted to put a very large file (.5GB) into a scalar in a way that has the 
system keeping most of the data on disk and putting in physical memory only 
what I need at any given moment. The problem statement is s'thing like

        $bigGulp = ` cat bigFile.txt` 
        
in order to do multi-line regexing. My first try with the application froze 
the rest of the system. I then configured linux with less virtual memory, and 
got an 'out of memory' error.  i then turned -- naively it seems now -- 
to 'tie' etc. But after finding an implementation module for a file-tied 
scalar, I don't see now a solution via this route either, so I am resigned to 
using s'thing along the lines of File::Stream.

(off topic for this list, but here it is anyhow: why can't you deal with this 
type of problem using linux virtual memory?)

Hoping someone has some magic,

Tom Arnall
north spit, ca


-- 
thanks,

tom arnall
north spit, ca

-- 
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