#!/usr/bin/perl use strict; use warnings; use Getopt::Long; GetOptions( "private" => \my $private ); my $file = shift or die "Usage: subs ProgramName"; my @subs; open my $fh, '<', $file or die "Cannot open ($file) for reading: $!"; while ( defined( my $line = <$fh> ) ) { if ( $line =~ /^\s*sub\s+([[:word:]]+)/ ) { my $sub = $1; next if ! $private && '_' eq substr $sub, 0, 1; push @subs, $sub; } } print join "\n", sort @subs;