It expects the name of the file to be searched as the only command line parameter. It will also skip any subroutine whose name begins with an underscore - as I said, this is ripped from a larger program ( the second toy ) doing something similar.
I also cause it to print the line number where the sub definition begins.
#!/usr/bin/perl -w use strict; my $source = shift @ARGV || ''; my %keyword = (); unless ( $source ) { print "Usage: $0 <file>\n"; exit; } open SRC, $source or die "Couldn't open $source : $!"; while( <SRC> ) { my ( $package, $name ); $package = $1 if ( ! $package && /^package\s+(.+);/ ); next unless ( /^sub\s+(.+){\s*$/ ); $name = $1; next if ( substr($name,0,1) eq "_" ); $name =~ s/\s+$//; $keyword{$name} = $.; } close SRC; for ( keys %keyword ) { print "$keyword{$_}:$_\n"; }
Update: Do NOT use Opera for Solaris when submitting - it seems to add a whole lot of newlines. Sorry for the mess.
HTH,
mikfire
In reply to Re: a list of functions within a pm
by mikfire
in thread a list of functions within a pm
by shrubbery
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |