in reply to shift on a tied array leads to strange results

I cannot reproduce your problem. Using the following code:

#! perl -slw use strict; use Tie::File; my @array; tie @array, 'Tie::File', 'junk.dat', memory => 0, recsep => "\t"; print shift @array while @array;

and data (and several variations of it)

1 2 3 4 5 6 7 8 9 10

Tie::File does exactly as expected.

Your sample snippet doesn't compile (with strict) anyway. The Tie::File should be in quotes and you have completely omitted the name fo the file. I suspect that if you added use strict, you might find the source of your problems.

However, they could be just a transcription errors, so I'd suggest you produce a cut down version of your program (with strict), just enough to demonstrate the problem, and post that.


Examine what is said, not who speaks.
Silence betokens consent.
Love the truth but pardon error.

Replies are listed 'Best First'.
Re^2: shift on a tied array leads to strange results
by la_t_sys (Initiate) on Apr 28, 2005 at 20:32 UTC
    Sorry for answering so late
    but I had to work on another urgend task.

    You're rigtht, I only posted an example code part, because I'm not used to editing text this way. Anyhow, if I use the code you have shown above, there are no problems (That's what I meant in my 'Test' statement).
    It seems to be a problem of using Tie::File for IPC, because I thought, this might be a simple form of a persistent FIFO for complex ASCII-messages.

      As Corion pointed out, Tie::File is not designed for concurrent access by multiple processes. It builds an index to the lines of the file in memory as it traverses the file and uses that index to find the lines if it has to revisit them. Shifting a line from the front of the file causes the entire file to be rewritten.

      If one process rewrites the file, the index held by the other process will be conpletely invalidated.

      Basically, "Don;t do that!".

      If you would care to describe the problem you are trying to solve (probably as a new question), then you will probably get good suggestions as to modules or code with which to solve it.


      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      Lingua non convalesco, consenesco et abolesco.
      Rule 1 has a caveat! -- Who broke the cabal?