A discussion in the CB about the use of $. (input line number) led me to an improved understanding of this infrequently used special variable. Consider the following code (yes, yes, I know it's an awful inefficient way to do it):

use warnings; use strict; open testFile, '>', 'delme.txt'; print testFile <<TEST; Test file line 1 Test file line 2 Test file line 3 TEST close testFile; open testFile, '<', 'delme.txt'; while (<DATA>) { my $current = $_; chomp $current; print "$.\n"; while (<testFile>) { print "$_" if $. == $current; } seek (testFile, 0, 0); $. = 0; } close testFile; __DATA__ 3 1 2

which prints:

1 Test file line 3 2 Test file line 1 3 Test file line 2

Note that the contents of $. is set to the line number for the most recently accessed file handle and that a seek counts as an access. Not only that, but the variable can be set for the current file handle by assigning to $.. Consider:

use warnings; use strict; open testFile, '>', 'delme.txt'; print testFile <<TEST; Test file line 1 Test file line 2 Test file line 3 TEST close testFile; open testFile, '<', 'delme.txt'; <DATA>; print "DATA: $.\n"; <testFile>; print "Test: $.\n"; <testFile>; <testFile>; print "Test: $.\n"; <DATA>; print "DATA: $.\n"; seek testFile, 0, 0; $. = 0; print "Test: $.\n"; <DATA>; print "DATA: $.\n"; close testFile; __DATA__ 3 1 2 5

which prints:

DATA: 1 Test: 1 Test: 3 DATA: 2 Test: 0 DATA: 3

Note that these tests were run using ActiveState Perl version 5.8.7 build 813. YMMV.


DWIM is Perl's answer to Gödel

In reply to $. - smarter than you might think 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.