in reply to Re: Tie::File strangeness with unshift
in thread Tie::File strangeness with unshift

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

Replies are listed 'Best First'.
Re: Re: Re: Tie::File strangeness with unshift
by Limbic~Region (Chancellor) on May 26, 2003 at 00:23 UTC
    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

        914,
        Just guessing here - try:

        tie my @array, 'Tie::File', "file.txt";

        instead of the 3 lines you had before.

        This is probably a difference in versions of Perl builds or in Tie::File. If my suggestion works - chalk it up to dumb luck - if it doesn't - try updating your Tie::File module on the server that doesn't work.

        Cheers - L~R