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

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.

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