Maplat

 view release on metacpan or  search on metacpan

devscripts/updateClasses.pl  view on Meta::CPAN

#!/usr/bin/perl

# MAPLAT  (C) 2008-2010 Rene Schickbauer
# Developed under Artistic license
# for Magna Powertrain Ilz

use strict;
use warnings;

updateClass('lib/Maplat/Worker.pm', 'lib/Maplat/Worker', 'Maplat::Worker::');
updateClass('lib/Maplat/Web.pm', 'lib/Maplat/Web', 'Maplat::Web::');
print "Done\n";


sub updateClass {
    my ($filename, $dirname, $basename) = @_;

    print "updating $filename with $basename classes from $dirname\n";

    my @files = findModules($dirname, $basename);

    my @lines;
    open(my $ifh, "<", $filename) or die($! . ": $filename");
    @lines = <$ifh>;
    close($ifh);

    
    my $start = 0;
    my $end = 0;

    open(my $ofh, ">", $filename) or die($!);
    foreach my $line (@lines) {
        if(!$start || $end) {
            print $ofh $line;
        }
        if($line =~ /^\#\=\!\=START\-AUTO\-INCLUDES/o) {
            $start = 1;
            foreach my $newline (sort @files) {
                print $ofh 'use ' . $newline . ";\n";
                print 'use ' . $newline . ";\n";
            }
        } elsif($line =~ /^\#\=\!\=END\-AUTO\-INCLUDES/o) {
            print $ofh $line;
            $end = 1;
        }
    }
    close($ofh);
}

sub findModules {
    my ($dirname, $basename) = @_;

    my @files;

    opendir(my $dfh, $dirname) or die($!);
    while((my $fname = readdir($dfh))) {
        next if($fname =~ /^\./);

	my $fullname = $dirname . '/' . $fname;
	if(-d $fullname) {
		push @files, findModules($fullname, $basename . $fname . '::');
		next;
	} elsif($fname !~ /\.pm$/) {
		next;
	}
    $fname = $basename . $fname;
	$fname =~ s/\.pm$//g;
        push @files, $fname;
    }
    closedir($dfh);

    return @files;

}



( run in 0.987 second using v1.01-cache-2.11-cpan-364913b4093 )