http://qs1969.pair.com?node_id=1154486


in reply to Re^4: Introspecting the current Perl file via DATA, even w/o DATA? (perl5db.pl)
in thread Introspecting the current Perl file via DATA, even w/o DATA?

Anyway, let us know if you'll find something details about that magic. ;-)
You're so lazy, LanX ;) I'm sure you could do it yourself, but if you insist...
# main.pl BEGIN { $^P = 0x400; } use test ();
and
# test.pm my @source = @{ $main::{ '_<' . __FILE__ } }; print for @source; 1;
Now, the thing is, you have to set $^P before the file (test.pm in this case) is even opened. So you can't do it inside test.pm itself, I don't think...

Is that good enough for you?

Replies are listed 'Best First'.
Re^6: Introsepcting the current Perl file via DATA, even w/o DATA? (perl5db.pl)
by Mr. Muskrat (Canon) on Feb 05, 2016 at 16:37 UTC

    I found this interesting so I played with it briefly...

    # main.pl my @source = @{ $main::{ '_<' . __FILE__ } }; shift @source; # get rid of sub DB::DB{}; print for @source;
    and
    PERL5DB="sub DB::DB{}" perl -d main.pl

    Output:

    my @source = @{ $main::{ '_<' . __FILE__ } }; shift @source; # get rid of sub DB::DB{}; print for @source;

    Update: I had found @{$main::{'_<'.$filename}} yesterday but didn't have time to play with it.

    Update 2: Added shift.

      > Added shift.

      as a side note: line numbers start with 1, so changing the content of the 0th element may be the better strategy. ( Otherwise looking up a line will include a cumbersome -1 operation.)

      Cheers Rolf
      (addicted to the Perl Programming Language and ☆☆☆☆ :)
      Je suis Charlie!

Re^6: Introspecting the current Perl file via DATA, even w/o DATA? (perl5db.pl)
by LanX (Saint) on Feb 05, 2016 at 16:19 UTC
    > Is that good enough for you?

    yes, I knew I can count on your collaboration! ;)

    > Now, the thing is, you have to set $^P before the file (test.pm in this case) is even opened.

    I think one could trick that², the question is rather about other penalties included.

    ... let's have a look into perlvar#$^P ...

    x400 Save source code lines into @{"_<$filename"} .

    OK this doesn't look to expensive ... benchmark needed.

    (too busy now ;-)

    Cheers Rolf
    (addicted to the Perl Programming Language and ☆☆☆☆ :)
    Je suis Charlie!

    footnotes

    ²) for instance IIRC it's possible to configure global setting for your perl interpreter.