Language::Zcode::Parser is a Perl module that reads and parses a Z-code file into a big Perl hash.
# Create a Pure Perl Parser
my $pParser = new Language::Zcode::Parser "Perl";
# If they didn't put ".z5" at the end, find it anyway
$infile = $pParser->find_zfile($infile) || exit;
# Read in the file, store it in memory
# Parse header of the Z-file
# Get the subroutines in the file (LZ::Parser::Routine objects)
my @subs = $pParser->find_subs($infile);
For finding where the subroutines start and end, you can either depend on an external call to txd, a 1992 C program available at ifarchive.org, or a pure Perl version.
Everything else is done in pure Perl.
new (class, how to find subs, args...)
This is a factory method. Called with 'Perl' or 'TXD' (or 'txd') as arguments, it will create Parsers of LZ::Parser::Perl or LZ::Parser::TXD, which are subclasses of LZ::Parser::Generic.
That class' 'new' method will be called with any other passed-in args.