#!/usr/bin/perl ########################################### # module-rename -- 2005, Mike Schilli ########################################### # PURPOSE ########################################### use strict; use warnings; use Pod::Usage; use Module::Rename; use Log::Log4perl qw(:easy); use Getopt::Std; use File::Basename; getopts("vh", \my %o); Log::Log4perl->easy_init({ level => $WARN, layout => "%m%n", }); my $VERSION = "0.01"; pod2usage({-message => basename($0) . " v$VERSION", -verbose => 2 }) if $o{h}; my($old, $new, $dir) = @ARGV; pod2usage "Missing arguments" unless defined $new; my $ren = Module::Rename->new( name_old => $old, name_new => $new, wipe_empty_subdirs => 1, ); $ren->find_and_rename($dir || "."); __END__ =head1 NAME module-rename - Rename Perl module distributions =head1 SYNOPSIS $ module-rename Old::Name New::Name Old-Name-Distro-Dir =head1 DESCRIPTION Have you ever created a module distribution, only to realize later that the module hierarchary needed to be changed? All of a sudden, C didn't sound cool anymore, but needed to be C instead? Going through a module's distribution, changing all package names, variable names, and move the directories around can be a tedious task. C comes with a script C which takes care of all this: $ ls Cool-Frobnicator-0.01/ $ module-rename Cool::Frobnicator Util::Frobnicator Cool-Frobnicator-0.01 Cool-Frobnicator-0.01/lib/Cool is empty and can go away. Done. The directory hierarchy has changed: $ ls -R Util-Frobnicator-0.01/ ... Util-Frobnicator-0.01/lib/Util/Frobnicator.pm ... and so has the content of all files: $ grep "package" Util-Frobnicator-0.01/lib/Util/Frobnicator.pm package Util::Frobnicator; =head2 Things to Keep in Mind =over 4 =item * C will rename files and replace their content, so make sure that you have a backup copy in case something goes horribly wrong. =item * After changing the module hierarchy, some directories might be empty, like the C directory above. In this case, a warning will be issued: Cool-Frobnicator-0.01/lib/Cool is empty and can go away. and the 'empty' directory gets deleted (even if a CVS subdirectory is in there). =back =head1 OPTIONS =over 8 =item B<-v> Verbose mode. =item B<-h> Show the script's version and manual page. =back =head1 LEGALESE Copyright 2005 by Mike Schilli, all rights reserved. This program is free software, you can redistribute it and/or modify it under the same terms as Perl itself. =head1 AUTHOR 2005, Mike Schilli