pileofrogs has asked for the wisdom of the Perl Monks concerning the following question:

I'm writing a module, and I'm using Module::Build. I want to add some unusual steps to the install process (specifically, I want to change the file owner of an installed CGI).

It seems like there ought to be a way to run arbitrary commands/scripts during the install phase, but Module::Build and Module::Build::Cookbook haven't hinted at anything.

Does anyone know how to do that? Or better yet, can anyone point me to a tutorial/howto/whatever that discusses advanced Module::Build usage and covers this question?

Thanks!
--Pileofrogs

Replies are listed 'Best First'.
Re: Module::Build and Custom Install Steps
by xdg (Monsignor) on Mar 03, 2006 at 19:08 UTC

    You can subclass Module::Build on the fly using the subclass method and override the methods that perform the actions. You may need to read through Module::Build::Base to find the methods you want to override, but the general pattern is ACTION_ followed by the name of the action you'd put after "Build". Here's an example of how it would work for install:

    # Build.PL use Module::Build; my $class = Module::Build->subclass( class => "Module::Build::Custom", code => <<'SUBCLASS', ); sub ACTION_install { my $self = shift; # YOUR CODE HERE $self->SUPER::ACTION_install; } SUBCLASS $class->new( module_name => 'Your::Module', # rest of the usual Module::Build parameters )->create_build_script;

    See the Module::Build::Authoring pod in any of the 0.27 developer releases for better documentation on this.

    -xdg

    Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.

      Oy! ++

      Awesome! It's so simple, now that you've waved it in front of my nose. I'm going to take this post and sent it to the Module::Build folks with a suggestion that they add it to their documentation.

      Thanks!

      --Pileofrogs

      Update: I sent your example into the Module::Build folks, and they're going to include it in Module::Build::Cookbook.