This function will scan your script (main::), for subs, scalars, arrays, hashes and other packages, just past the name of the package to start the scan and what you want ($,@,%,&,::).
sub GET_PACK::entrys { my ( $pack , %type ) = @_ ; if (! %type) { %type = qw($ 1 @ 1 % 1 & 1 :: 1) ;} local(*GET_PACK_tab) = eval("*$pack\::"); my @PACK ; foreach my $GET_PACK_Key ( sort keys %GET_PACK_tab ) { local(*GET_PACK_entry) = $GET_PACK_tab{$GET_PACK_Key}; if ( $type{'$'} && defined $GET_PACK_entry) { push(@PACK , "\$$GET +_PACK_Key") ;} if ( $type{'@'} && defined @GET_PACK_entry) { push(@PACK , "\@$GET +_PACK_Key") ;} if ( $type{'%'} && $GET_PACK_Key !~ /::$/ && defined %GET_PACK_ent +ry) { push(@PACK , "\%$GET_PACK_Key") ;} if ( $type{'&'} && defined &GET_PACK_entry) { push(@PACK , "\&$GET +_PACK_Key") ;} if ( $type{'::'} && $GET_PACK_Key =~ /::$/) { $GET_PACK_Key =~ s/:+$// ; push(@PACK , "$GET_PACK_Key\::") ; } } return( @PACK ) ; }


#Example:
sub test { print "Hello!\n" ;} my $test = 123 ; @l = GET_PACK::entrys('main' , '$' => 1 , '@' => 1 , '%' => 1 , '&' => 1 , '::' => 1 , ) ; foreach my $l_i ( sort @l ) { print "$l_i\n" ;}

# Send your feedback!
#
# "The creativity is the expression of the liberty".

Replies are listed 'Best First'.
(jeffa) Re: Scan memory for sub,scalars,arrays,hashes,packages...
by jeffa (Bishop) on Jul 26, 2002 at 05:52 UTC
    Devel::Symdump is nice too ;)
    use strict; use Devel::Symdump; sub test { print "Hello!\n" ;} my $test = 123 ; my $dump = Devel::Symdump->new(); for (qw(packages scalars arrays hashes functions ios)) { print "$_:\n"; print "\t$_\n" for $dump->$_; }

    jeffa

    L-LL-L--L-LL-L--L-LL-L--
    -R--R-RR-R--R-RR-R--R-RR
    B--B--B--B--B--B--B--B--
    H---H---H---H---H---H---
    (the triplet paradiddle with high-hat)