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: $!";
}