Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses

Re: $. - smarter than you might think

by shmem (Chancellor)
on Jun 22, 2006 at 22:35 UTC ( #557033=note: print w/replies, xml ) Need Help??

in reply to $. - smarter than you might think

You can even assign to it and cheat about the line number:
#!/usr/bin/perl <DATA>; $.= 39; print "$. $_" while <DATA>; __DATA__ line 1 line 2 line 3
BTW, the DATA filehandle is funny as well. This prints it's source along with line numbers (perl 5.8.8):
#!/usr/bin/perl seek DATA,0,0; print "$. $_" while <DATA>; __DATA__ line 1 line 2 line 3
1 #!/usr/bin/perl 2 3 seek DATA,0,0; 4 print "$. $_" while <DATA>; 5 __DATA__ 6 7 line 1 8 line 2 9 line 3

Bug or feature? :-)


Update: this is covered implicitly in perl561delta, Potential to leak DATA filehandles:

Using the "__DATA__" token creates an implicit filehandle to th +e file that contains the token. It is the program's responsibility to + close it when it is done reading from it.

_($_=" "x(1<<5)."?\n".qˇ/)Oo.  G°\        /
                              /\_¯/(q    /
----------------------------  \__(m.====ˇ.(_("always off the crowd"))."ˇ
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}

Replies are listed 'Best First'.
Re^2: $. - smarter than you might think
by GrandFather (Sage) on Jun 22, 2006 at 22:53 UTC

    Ohh, that's nice, if you expect it. :)

    So you can have a Perl script print itself by:

    use warnings; use strict; seek DATA, 0, 0; print while <DATA>; __END__

    so long as __END__ or __DATA__ are present.

    Of course that also means that you have to my $dataStart = tell DATA; if you want to seek DATA back to the data start rather than script start.

    DWIM is Perl's answer to Gödel
      heh.. that makes me think about a $SIG{__DIE__} handler which not only says harshly "Can't do method foo in context bar in file quux line 1024" or such, but prints the 3 lines above and below the error as well...
      don't talk nonsense at line 23. 21 learn('nothing'); 22 sub blah (\[&]) { 23 warn "don't talk nonsense"; > 24 $_[0]->(); 25 } 26 sub learn { 27 my $self->teach(shift); Can't use string ("bar") as a subroutine ref while "strict refs" in us +e at line 24.

      I discovered this playing with your code, btw. Thanks!


      _($_=" "x(1<<5)."?\n".qˇ/)Oo.  G°\        /
                                    /\_¯/(q    /
      ----------------------------  \__(m.====ˇ.(_("always off the crowd"))."ˇ
      ");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://557033]
[marto]: Corion I've been toying with this as a background task
[marto]: along with the pod for perlmodinstall

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (6)
As of 2017-08-21 09:43 GMT
Find Nodes?
    Voting Booth?
    Who is your favorite scientist and why?

    Results (320 votes). Check out past polls.