in reply to Tie::File strangeness with unshift

914,
As I mentioned in the Chatter Box, can you provide a small snippet of code that reproduces your problem. I can't seem to reproduce it. Typically when trying to create such a reproducible snippet you will find and correct your own problem. Additionally, even with readmore tags - it would have probably been better just to get a unique list of the error messages and perhaps a total count if you felt so inclined.

Cheers - L~R

Replies are listed 'Best First'.
Re: Re: Tie::File strangeness with unshift
by u914 (Pilgrim) on May 26, 2003 at 00:15 UTC
    Thanks...

    As you suggest, i've created a new, short and dumb script that does something similar. Of course it works, i doubt the problem is anywhere but in my own code...

    #!/usr/bin/perl -Tw use Tie::File; use strict; my @array; my $file = "./file.txt"; my $line = "this is a really long line of text (sortof)"; tie @array, 'Tie::File', $file; unshift @array, $line; untie @array
      914,
      I noticed you are using the -T option for tainting. Is this running as a CGI? In a nutshell, taint is designed to ensure that Perl doesn't do anything externally by using information obtained externally. I don't think this is your problem, but I figured it was worth pointing out.

      Ok - so you have done the first step - eliminate the possibility that you have a bad copy of Tie::File by proving that it can work. Now you need to find out what it is about your code that breaks it.

    • Trim out the fat. This includes, but is not limited to removing all print statements and things not related to the problem.
    • Run the script again - if the problem is still there, go back to the first step
    • If the problem goes away - then you have discovered that something you thought was innocuous actually wasn't - you have found your own problem.
    • If you have removed all the fat that you can possibly remove and the problem is still there - post that code - that way we can see exactly what you are seeing

      Cheers - L~R

        L~R ... thanks for taking the time with me..

        It turns out that my test code (above) does indeed reproduce the problem, but only on the server in question, not my local machine (yes, the overall script is CGI).

        The last error messages seem to be relevant too. When i run this script:

        #!/usr/bin/perl -Tw use Tie::File; use strict; my @array; my $file = "./file.txt"; my $line = "this is a really long line of text (sortof)"; tie @array, 'Tie::File', $file; unshift @array, $line; untie @array

        from the command line, i get:
        bash-2.05a$ ./tie
        Use of uninitialized value in read at /usr/lib/perl5/5.6.1/Tie/File.pm line 699, <FH> line 7. Use of uninitialized value in read at /usr/lib/perl5/5.6.1/Tie/File.pm line 699, <FH> line 7.

        Line 7 of my script is the "my @array;" declaration

        The target file is modified, but not as expected, and repeated executions of the test script don't change the file any further. I'm beginning to suspect my installation of Tie::File or Perl itself, since on my local machine this exact same script works as one would think it should.

        perl -v reports v5.6.1