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


DWIM is Perl's answer to Gödel

In reply to An odd thing happend on the way to answering a SoPW - seek DATA oddity by GrandFather

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.