http://qs321.pair.com?node_id=689778


in reply to Re: Open in for loop/array structure
in thread Open in for loop/array structure

Thank you all so much for your help, the simple removal of the <>'s fixed the problem. I'm new enough to not totally follow why filehandles caused the problem, yet the code worked on the first run through (the error version with filehandles included) and not on subsequent iterations, but I'm happy it works.

Also, I added the "use strict" and got a trillion warnings, so removed it to verify completion which it did, I'll work on making it strict friendly too.

Final question if someone has an understanding. This doesn't adjust my calculations at all, but is interesting for me in regards to better understanding. The first time through the for loop ($k=0), the 'print "$FN$k\n"' line prints the correct name (out-02-00.txt), but from then ($k>0) on I get an error that says "print() closed on filehandle OUT at isotopes-p7.perl line 14", which is the print line I just referred to. Is this because I "close(OUT)" at the bottom of the for loop and this is affecting the next iterations print statement until a new "OUT" file is opened? Any way to circumvent this? (I would just move the open(OUT) statement up, but I need $filename to correctly name it). Can I open a dummy out file for the time being or is there specific nomenclature for opening to terminal? I'll quit hazarding guesses and wait for an answer. Thanks again, any thoughts are welcome.

Replies are listed 'Best First'.
Re^3: Open in for loop/array structure
by ikegami (Patriarch) on Jun 03, 2008 at 00:57 UTC

    yet the code worked on the first run through (the error version with filehandles included) and not on subsequent iterations, but I'm happy it works.

    You weren't using file handles. As already explained, you were using glob. And glob in scalar context acts as an iterator. The first time it's called, it returns the first match. The second time it's called, it returns the second match. And so on. When it's done, it returns undef. I've demonstrated that earlier in this thread.

    The first time you called <$FH[$k]> (when $k==0), it returns the first result for $k==0.
    The second time you called <$FH[$k]> (when $k==1), it returns the second result for $k==0 (undef).

    but from then ($k>0) on I get an error that says "print() closed on filehandle OUT at isotopes-p7.perl line 14"

    You told print to output to OUT (select (OUT);), but you closed OUT. Personally, I would remove the call to select and change
    print "$BU[$i-1] $MA1[$i-1] $MA2[$i-1]\n";
    to
    print OUT "$BU[$i-1] $MA1[$i-1] $MA2[$i-1]\n";
    I don't like using select. As you've encountered first hand, it introduces problems too easily.

      ikegami, Thanks for the very particular explanation, as that helps it make sense to me. I didn't understand what it meant by me using "glob", being that I'm quite limited in my understanding. Thanks for taking the time, it makes a lot more sense now. I had read what you wrote earlier, it just didn't all make sense since I'm Perl ignorant in a lot of things. Thanks again! ~Jack
        Sorry, I didn't mean to imply you hadn't read them. I just meant to tie what I was saying to the relevant posts in the thread to let you know from where I was coming or to where I was leading.