GrandFather has asked for the wisdom of the Perl Monks concerning the following question:
When playing around with some code in answer to reading a line from file two times I found the following odd behaviour:
use warnings; use strict; print "Using Perl $]\n\n"; print "Result using DATA:\n\n"; doRead (*DATA); print "\nResult using file handle:\n\n"; open my $FH, '<', 'noname.pl'; doRead ($FH); close $FH; sub doRead { my $FH = shift; while (! eof $FH) { my $lineStart = tell $FH; my $line = <$FH>; chomp $line; if ($line =~ /^NEWTABLE/) { print "Found at $lineStart: >$line<\n"; seek $FH, $lineStart, 0; $line = <$FH>; chomp $line; print "Reread as >$line<\n"; } } } __DATA__ First line Second line NEWTABLE - third line Fourth line
Prints:
Using Perl 5.008007 Result using DATA: Found at 627: >NEWTABLE - third line< Reread as >< Found at 628: >NEWTABLE - third line< Reread as >< Found at 629: >NEWTABLE - third line< Reread as >NEWTABLE - third line< Result using file handle: Found at 629: >NEWTABLE - third line< Reread as >NEWTABLE - third line<
Notice that using a "conventional" file handle works as expected, but performing seek on DATA generates rather strange results! Can anyone account for this behaviour?
This was run on Windows XP using AS Perl 5.8.7
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: An odd thing happend on the way to answering a SoPW - seek DATA oddity (bugs)
by tye (Sage) on Dec 21, 2006 at 05:07 UTC | |
|
Re: An odd thing happend on the way to answering a SoPW - seek DATA oddity
by jettero (Monsignor) on Dec 21, 2006 at 04:12 UTC | |
|
Re: An odd thing happend on the way to answering a SoPW - seek DATA oddity
by jdporter (Paladin) on Dec 21, 2006 at 04:19 UTC | |
|
Re: An odd thing happend on the way to answering a SoPW - seek DATA oddity
by sgt (Deacon) on Dec 21, 2006 at 08:33 UTC |