#!/usr/local/bin/perl -w
use strict;
use Module::Dependency::Info;
# Point this to the data file you created with Module::Dependency::Ind
+exer.
# See the docs on this module for details.
# Tip: to index all of your perl files, run this (thanks merlyn):
# indexer.plx -t -b `perl -e 'print "@INC"'`
Module::Dependency::Info::setIndex( 'unified.dat' );
use Graph;
use Data::Dumper;
use Module::CoreList;
# This is your autobundle file.
open (IN, "<", "in_bundle.pm")
or die "Can't open autobundle file.";
# This is the new autobundle file.
open (OUT, ">", "new_bundle.pm")
or die "Can't open new bundle file.";
my $in_content = 0;
my $post_content = 0;
my @module_list;
my %module_list;
my $tail;
while( <IN> ){
# Get start of autobundle.
unless (/^=head1\s+CONTENTS/ or $in_content ){
print OUT $_;
next;
}
# Get tail of autobundle.
if (/^=head1\s+CONFIGURATION/ or $post_content){
$post_content = 1;
$tail .= $_;
next;
}
# Get the module list.
chomp;
$in_content = 1;
if (/^\w+/){
my @items = split ' ';
$module_list{$items[0]} = $items[1];
push @module_list, $items[0];
}
}
# Sort the module list.
my $listref = Module::Dependency::Info::allItems();
my $g = Graph->new;
foreach my $item ( @$listref ){
# My index had a bunch of pls and cgis, so sort them out.
next if ($item =~ /\.pl$/);
next if ($item =~ /\.cgi$/);
my $childref = Module::Dependency::Info::getChildren( $item );
foreach ( @$childref ){
# Skip modules in core.
# Remove this line to process core modules.
next if ($Module::CoreList::version{ $] }{$item});
$g->add_edge($item, $_);
}
}
# Try to remove remaining cycles, if there are any.
my @cycle = $g->find_a_cycle;
while (@cycle){
$cycle[1] = $cycle[0] if ( not $cycle[1] );
print "Removing edge $cycle[0], $cycle[1] from graph to prevent cycl
+e...\n";
$g->delete_edge($cycle[0], $cycle[1]);
@cycle = $g->find_a_cycle;
}
my @sorted = reverse $g->topological_sort;
print OUT "=head1 CONTENTS\n\n";
foreach (@sorted){
print OUT $_ . "\n\n" if exists $module_list{$_};
}
print OUT $tail;
close IN;
close OUT;
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|