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
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: $. - smarter than you might think
by ikegami (Patriarch) on Jun 22, 2006 at 22:29 UTC | |
Re: $. - smarter than you might think
by shmem (Chancellor) on Jun 22, 2006 at 22:35 UTC | |
by GrandFather (Saint) on Jun 22, 2006 at 22:53 UTC | |
by shmem (Chancellor) on Jun 22, 2006 at 23:13 UTC | |
by radiantmatrix (Parson) on Jun 26, 2006 at 15:56 UTC | |
by shmem (Chancellor) on Jun 26, 2006 at 16:23 UTC | |
Re: $. - smarter than you might think
by sh1tn (Priest) on Jun 23, 2006 at 18:26 UTC | |
Re: $. - smarter than you might think
by codeacrobat (Chaplain) on Jun 28, 2006 at 19:33 UTC | |
by GrandFather (Saint) on Jun 28, 2006 at 20:24 UTC |
Back to
Meditations