Process::Packageable - Process that can be packaged with its dependencies
# In MyPackageableProcess.pm: package MyPackageableProcess; use strict; use base qw{ Process Process::Storable Process::Packageable }; # Add your dependencies to your parent class's if you like sub dependencies { my $self = shift; return ( $self->SUPER::dependencies(), 'Some::Class::Name' => '1.01', 'Another::Class' => '0.03', ... ); } # Now as usual for Process subclasses: sub new { ... } sub prepare { ... } sub run { ... } # in user code: my $object = MyPackageableProcess->new( foo => 'bar' ); # Find out about the object's explicit class dependencies my @dependencies = $object->dependencies(); # key/value pairs in @dependencies, but with duplicates
Process::Packageable provides a role (an additional interface and set of rules) that allow for Process objects to be packaged into a Process::Packaged object together with the Process object's dependencies.
Process::Packageable
Process
Inheriting from Process::Packageable in a Process subclass, you agree to implement the dependencies method as documented below. A sample dependencies method which just requires a minimum perl version (5.005) is implemented by Process::Packageable.
dependencies
In addition, you need to make sure that any dependencies of your subclass can be correctly identified by the Module::ScanDeps module. In order to identify your Process's dependencies, a run of Module::ScanDeps should suffice.
Module::ScanDeps
Furthermore, your subclass needs to be serializable. That means it has to be a subclass of Process::Serializable. You may either implement your own serialization code or inherit from Process::Storable, Process::YAML or other Process::Serializable subclasses.
Process::Serializable
Process::Packaged is not part of the Process distribution.
Process::Packaged
A Process::Packaged object can be "frozen" to a string, moved around, and then be "thawed" back into an object again. (A Process::Packaged object is a Process::Serializable object.)
During the reconstruction of the Process::Packaged object, it extracts the dependencies of the Process::Packageable object, checks whether the dependencies are okay, and loads the class of the packaged object.
A Process must be packageable whenever it is serializable. Please refer to Process::Serializable for details on when that is the case.
my @dependency_list = $object->dependencies;
The dependencies method returns a list of class names and respective version strings that describe the dependencies of your Process subclass. There are no parameters to dependencies().
dependencies()
The returned list has class names and respective version strings interleaved. The classes will be mapped to distributions which will be mapped to files by Process::Packaged.
Specifying a '0' as a version indicates any version.
'0'
There is a special key word perl which can be used to set a dependency on a minimum perl version. (perl isn't packaged, though.)
perl
Dependencies on modules that are not pure Perl might not be packaged and extracted correctly.
The default implementation of dependencies returns
'perl', '5.005'
You are expected to override it. In order to make your class subclassable, you should include the dependencies of your parent class into the returned list of dependencies. The SYNOPSIS has an example implementation.
Bugs should be reported via the CPAN bug tracker at
http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Process
For other issues, contact the author.
Adam Kennedy <adamk@cpan.org>
http://ali.as/
Copyright 2006 - 2011 Adam Kennedy.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the LICENSE file included with this module.
To install Process, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Process
CPAN shell
perl -MCPAN -e shell install Process
For more information on module installation, please visit the detailed CPAN module installation guide.