http://www.perlmonks.org?node_id=98196


in reply to a list of functions within a pm

I am not exactly sure how you want this list displayed, but the attached code is one I have used before to accomplish a similar job.

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