X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2FB%2FB%2FStash.pm;h=5e60868a28ea7c4b248765b5448327c9e084a8aa;hb=bb7c595be2e30a806b95ad83e9d3613aeb95c384;hp=42c8bc0fd3172402d4fd936b9fb16f5e8ee87e5b;hpb=a6f4eb0a57a2e0009d1bf64dff4f70a26302e92d;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/B/B/Stash.pm b/ext/B/B/Stash.pm index 42c8bc0..5e60868 100644 --- a/ext/B/B/Stash.pm +++ b/ext/B/B/Stash.pm @@ -2,21 +2,34 @@ # vishalb@hotmail.com package B::Stash; +our $VERSION = '1.00'; + +=pod + +=head1 NAME + +B::Stash - show what stashes are loaded + +=cut + BEGIN { %Seen = %INC } -END { +CHECK { my @arr=scan($main::{"main::"}); - @arr=map{s/\:\:$//;$_;} @arr; + @arr=map{s/\:\:$//;$_ eq ""?():$_;} @arr; print "-umain,-u", join (",-u",@arr) ,"\n"; } sub scan{ my $start=shift; + my $prefix=shift; + $prefix = '' unless defined $prefix; my @return; foreach my $key ( keys %{$start}){ +# print $prefix,$key,"\n"; if ($key =~ /::$/){ unless ($start eq ${$start}{$key} or $key eq "B::" ){ - push @return, $key ; - foreach my $subscan ( scan(${$start}{$key})){ + push @return, $key unless omit($prefix.$key); + foreach my $subscan ( scan(${$start}{$key},$prefix.$key)){ push @return, "$key".$subscan; } } @@ -24,6 +37,16 @@ sub scan{ } return @return; } -1; - +sub omit{ + my $module = shift; + my %omit=("DynaLoader::" => 1 , "XSLoader::" => 1, "CORE::" => 1 , + "CORE::GLOBAL::" => 1, "UNIVERSAL::" => 1 ); + return 1 if $omit{$module}; + if ($module eq "IO::" or $module eq "IO::Handle::"){ + $module =~ s/::/\//g; + return 1 unless $INC{$module}; + } + return 0; +} +1;