roboticus has asked for the wisdom of the Perl Monks concerning the following question:
Hello, all--
I've got a question that I can't answer[1]. Given this code:
#!/usr/bin/perl -w use strict; use warnings; while (<DATA>) { if ($. % 10 == 1) { print; for my $cnt (0 .. 3) { <DATA>; # my $t=<DATA>; print; # print $t; } } } __DATA__ Line 0001 Line 0002 Line 0003 Line 0004 Line 0005 Line 0006 Line 0007 Line 0008 Line 0009 Line 0010 Line 0011 Line 0012 Line 0013 Line 0014 Line 0015 Line 0016
I expected to see this:
Line 0001 Line 0002 Line 0003 Line 0004 Line 0005 Line 0011 Line 0012 Line 0013 Line 0014 Line 0015
So imagine my surprise when I saw this:
Line 0001 Line 0001 Line 0001 Line 0001 Line 0001 Line 0011 Line 0011 Line 0011 Line 0011 Line 0011
By changing the two commented lines, I get the desired output, so my program works now. But I can't rest until I know what's causing this behavior. I expect that it has something to do with the nested while and for loops and some interaction with $_.
[1] I've tried to answer it myself, but have been unsuccessful.
- I've looked over perlsyn (for for, while, and <>) and perlop (for the <> operator) to try to find a clue, but if it's in either of those, I missed it.
- I also tried a Super Search, and while I found some interesting nodes, I didn't find anything that answers my question. (I can't figure out the correct search terms, so I get far too many unrelated nodes in the results list.)
Can someone whack me with a cluestick? I'd really appreciate it...
Update: Thanks to everyone who replied. I updated my script and added it to the Code Catacombs.
...roboticus
Back to
Seekers of Perl Wisdom