LanX has asked for the wisdom of the Perl Monks concerning the following question:

Hi

with PadWalker I can inspect the my-vars used in a sub via peek_sub but I can't find a way with padwalker to also get the package-vars.

Do I need to parse the Op-tree for that?

use v5.12.0; use warnings; { package Other; our $our1 = "our1"; my $my1 = "my1"; sub foo { my $my0 = "my0"; our $our0 = "our0"; say $my1; say $our1; } } package main; use PadWalker qw/peek_sub peek_our/; use Data::Dump qw/pp dd/; my $block = \&Other::foo; pp peek_sub( $block );

-->

{ "\$my0" => \undef, "\$my1" => \"my1" }

Cheers Rolf
(addicted to the 𐍀𐌴𐍂𐌻 Programming Language :)
Wikisyntax for the Monastery

Replies are listed 'Best First'.
Re: peek_sub but with package vars
by choroba (Cardinal) on Feb 26, 2023 at 21:16 UTC
    Why do you need them? They are just aliases for package variables which you can access without any special tools.
    for my $k (do { no strict 'refs'; keys %{'Other::'}}) { say $k; }

    map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]
      because I want to change them locally while executing the sub and I don't want to change all package vars in all potential namespaces

      edit

      Only in the demo do they all belong to the package 'Other'. In praxis I have no clue which namespaces are used. it s always possible to have $Fully::Qualified::names .

      Cheers Rolf
      (addicted to the 𐍀𐌴𐍂𐌻 Programming Language :)
      Wikisyntax for the Monastery