Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

I wrote the follwoing snippet to test writing to the same file I've tied.
use warnings; use strict; use Tie::File; my @file; my $template = 'test.dat'; my $o = tie @file, 'Tie::File', $template, recsep => "\r\n"; $o->flock; my @array = @file; untie @file; open (WRITE, ">test.dat"); foreach (@array) { if (/one/) { print WRITE "foo\n"; } } close WRITE;
The above code doesn't let me write to the same file even after I've untied it...Any ideas?
Thanks!

Replies are listed 'Best First'.
Re: Writing to a Tied File ??
by Limbic~Region (Chancellor) on Jan 31, 2005 at 19:52 UTC
    Anonymous Monk,
    I am surprised you didn't mention the warning you get:

    untie attempted while 1 inner references still exist at...

    This is because you have attempted to untie the array without first getting rid of the object. There are two ways to solve this problem. As a rule of thumb, you should always be checking the return code of things like open.

    undef $o; untie @file; # or tie my @file, 'Tie::File', 'file.name'; (tied @file)->flock; # .... untie @file;
    Incidently, is the code the way it is because you couldn't figure out what is going on? I only ask because you can both read and write to the file when it is tied. That's the module's intention in the first place.

    For what it is worth, I think the documentation could be clearer on this. It does say The best way to unlock a file is to discard the object and untie the array but it should give an example of this.

    Cheers - L~R

Re: Writing to a Tied File ??
by zentara (Cardinal) on Jan 31, 2005 at 19:51 UTC
    I get a fatal warning when running your script:
    untie attempted while 1 inner references still exist at ./426704.pl li +ne 13.
    Maybe read the section in perldoc Tie::File on flock, about how to release the Tie?

    I'm not really a human, but I play one on earth. flash japh