in reply to (ar0n) Re: Filehandles and Arrays
in thread Filehandles and Arrays

I played around with this some, and noticed that if you're reading a file off of the command line already (at least in the situations I could test) it doesn't work. Which, in my view, it should, owing to local and all. Specifically, it keeps right on reading off of the file specified on the command line, try as I might (by localizing @ARGV and $ARGV and even *ARGV, which was probably a bad idea) to dissuade it.

Can any kind, wise, helpful monks explain why and when this will and won't work? It's a neat trick in any case, but if it could be worked as a general file-slurper without the baggage, it'd be even cooler.



If God had meant us to fly, he would *never* have give us the railroads.
    --Michael Flanders

Replies are listed 'Best First'.
(tye)Re: Filehandles and Arrays
by tye (Sage) on May 08, 2001 at 07:09 UTC

    Well, I'm not who you asked for so feel free to ignore me. I've said it before and it works for me: my @lines= do { local *ARGV; @ARGV= $name; <> }; I have tested it while in the middle of using <> to read from files given on the command line and it read the lines from the named file and then the next <> resumed right where it had left off.

    Perhaps you could post some code that demonstrates how it fails (as I was never completely sure that it was foolproof).

            - tye (but my friends call me "Tye")

      I kicked all of these around some, and I'm still confused. Possibly this is a local issue to me, possibly not. In summary, I got ar0n's technique to work when no file was being read from the command line (in the debugger, at least), but not the modification suggested by merlyn and tye (who I would not dream of ignoring), and neither when a file was being read. But tye says it works for him, and tye is an honorable man...

      So, below are what I did and what happened, and if I'm making a stupid mistake I'll be very happy to find out what it is. I'm only including the results trying to read from two files at once, because it's long enough already, and the other ones don't add anything much.

      For reference, This is perl, version 5.004_04 built for IP27-irix

      Pseudo-update: and it appears that it is indeed relevant. Oh, why can't they install 5.6 here?Oh well, at least I'm not confused any more. :-)

      ChemBoy mentioned that this didn't work for him so I tested with Perl 5.004_01 and got an empty array and no error message (though subsequent <>s resumed where they had left off). ChemBoy seems to get different results from either of my tests.

      So perhaps this overly-cute hack works for 5.6 but fails in different ways for earlier versions. More data is required before I'd draw any firm conclusions, but at least isn't just my word against ChemBoy's now.

              - tye (but my friends call me "Tye")