use strict; use warnings; use B::Showlex; sub dumpit { B::Showlex::compile(-newlex,-nosp,'mysub')->() } sub mysub { my $subvar = 42; my @subvar = qw(The quick brown fox); my %subvar = qw(red live blue neutral green earth); return; } dumpit(); #### main::mysub: main::mysub Pad has 17 entries 1: PVNV (0x1b49b24) "$subvar" = NULL (0x1b49b44) 2: PVNV (0x1b49ab4) "@subvar" = AV (0x1b49a74) undef 4: PVNV (0x1b49a44) "%subvar" = HV (0x1b49a24) HASH #### sub dumpit { my $out; # Redirect STDOUT to a string open my $oldout, ">&STDOUT" or warn "Can't dup STDOUT: $!"; close STDOUT; open(STDOUT,'>',\$out) or warn "STDOUT redirection failed:$!"; B::Showlex::compile(-newlex,-nosp,'mysub')->(); my @lines = split(/\n/,$out); shift @lines; shift @lines; for my $line (@lines) { $line =~ s/.*\"(.\w+)\".*/$1/; print STDERR "$line\n"; } # Restore STDOUT open STDOUT, ">&", $oldout or die "Can't dup \$oldout: $!"; }