Skip to content
Perl

Modules and Packages

Create reusable modules with package keyword.

By EZ4Code Team
modulepackageexport

Code

# File: MyUtils.pm
package MyUtils;
use strict;
use warnings;
use Exporter 'import';

our @EXPORT_OK = qw(greet factorial sum);

sub greet {
  my ($name) = @_;
  return "Hello, $name!";
}

sub factorial {
  my ($n) = @_;
  return 1 if $n <= 1;
  return $n * factorial($n - 1);
}

sub sum {
  my @nums = @_;
  my $total = 0;
  $total += $_ for @nums;
  return $total;
}

1;  # Module must return true

# Usage:
# use MyUtils qw(greet factorial);
# print greet("Alice");
# print factorial(5);

# OO style (Moose or Moo recommended)
package Person;
use Moose;

has 'name' => (is => 'ro', isa => 'Str', required => 1);
has 'age'  => (is => 'rw', isa => 'Int', default => 0);

sub greet {
  my ($self) = @_;
  return "Hi, I'm " . $self->name;
}

__PACKAGE__->meta->make_immutable;
1;

Explanation

Modules end in .pm and return a true value (1;). @EXPORT_OK lists functions importers can request. use Module qw(func) imports specific functions. For OO, Moose is the modern standard — has declares attributes with type constraints, provides constructors, accessors, and roles. Moo is a lighter alternative. Always end modules with 1;.

More Perl Snippets