There are two main type of sub routines in MIP.
- Sub routines that are imported/exported
- Utility sub routines that only resides in the script or module they are created. These are named using an underscore in the beginning of the sub routine name i.e.
sub _a_utility_sub
A template for sub routines are found in the code dir.
The sub routine consists of four sections:
- A documentation part with a mandatory header:
## Function : Describe the sub routine function here
## Returns : Name of variables returned. If none leave blank
## Arguments: $arrays_ref => Array ref description {REF}
## : $hash_href => Hash ref description {REF}
## : $scalar => Scalar description- Initilization of parameters:
my ($arg_href) = @_; #Always start with unpacking the parameters array
## Flatten argument(s)
my $arrays_ref; # Parameters without a default value
my $hash_href;
## Default(s) # This is for parameters with a default value
my $scalar;- Checking the supplied parameters:
my $tmpl = {
arrays_ref => {
default => [], # Empty array ref
defined => 1, # Must be defined when passed
required => 1, # Must be supplied when passed
store => \$arrays_ref, # Where to store the parameter
strict_type => 1, # Require correct type
},
hash_href => {
default => {},
defined => 1,
required => 1,
store => \$hash_href,
strict_type => 1,
},
scalar => {
allow => qr/ ^\d+$ /sxm, # Set allowed value
default => 1,
store => \$scalar,
strict_type => 1,
},
};
check( $tmpl, $arg_href, 1 ) or croak q{Could not parse arguments!}; # Check parameters according to template- The main part of the sub routine that actually does something.
- Finally always end with a return statement
return;