#!/usr/bin/perl use warnings; use strict; use Parse::RecDescent 1.94; use File::Copy qw/move/; sub read_file { my $file = shift; local( $/, *FH ); open( FH, $file ) or return undef; return ; } build_parser 'lib/Mail/IMAPClient/BodyStructure/Parse.grammar' , 'Mail::IMAPClient::BodyStructure::Parse'; build_parser 'lib/Mail/IMAPClient/Thread.grammar' , 'Mail::IMAPClient::Thread'; sub build_parser { my ($grammarfn, $package) = @_; print "* building $package\n"; my $grammar = read_file $grammarfn or die "cannot read grammar from $grammarfn: $!\n"; Parse::RecDescent->Precompile($grammar, $package); # clumpsy output by Parse::RecDescent my $outfn = $package . '.pm'; $outfn =~ s/.*\:\://; my $realfn = $grammarfn; $realfn =~ s/\.\w+$/.pm/; move $outfn, $realfn or die "cannot move $outfn to $realfn: $!\n"; }