A package gives subroutines a namespace so names can be organized.

package A package is a namespace for Perl symbols such as subroutine names.

Package Basics

name
package_basics.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;

package Greeter;

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

package main;

my $name = "Perl";
my $message = Greeter::greet($name);

print "name=$name\n";
print "message=$message\n";
use strict;
use warnings;

package Greeter;

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

package main;

my $name = "Mira";
my $message = Greeter::greet($name);

print "name=$name\n";
print "message=$message\n";
use strict;
use warnings;

package Greeter;

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

package main;

my $name = "Ada";
my $message = Greeter::greet($name);

print "name=$name\n";
print "message=$message\n";
  1. $name ← Perl

    13my $name→ Perl = "Perl"; #@name="Mira", "Ada"14my $message = Greeter::greet($namePerl);
  2. $name ← Perl

    6sub greet {7    my ($name→ Perl) = @_;8    return "Hello, $namePerl";9}
  3. $message ← Hello, Perl

    13my $name = "Perl"; #@name="Mira", "Ada"14my $message→ Hello, Perl = Greeter::greet($namePerl);1516print "name=$namePerl\n";17print "message=$messageHello, Perl\n";
    outputname=Perl
    message=Hello, Perl
  1. $name ← Mira

    13my $name→ Mira = "Mira";14my $message = Greeter::greet($nameMira);
  2. $name ← Mira

    6sub greet {7    my ($name→ Mira) = @_;8    return "Hello, $nameMira";9}
  3. $message ← Hello, Mira

    13my $name = "Mira";14my $message→ Hello, Mira = Greeter::greet($nameMira);1516print "name=$nameMira\n";17print "message=$messageHello, Mira\n";
    outputname=Mira
    message=Hello, Mira
  1. $name ← Ada

    13my $name→ Ada = "Ada";14my $message = Greeter::greet($nameAda);
  2. $name ← Ada

    6sub greet {7    my ($name→ Ada) = @_;8    return "Hello, $nameAda";9}
  3. $message ← Hello, Ada

    13my $name = "Ada";14my $message→ Hello, Ada = Greeter::greet($nameAda);1516print "name=$nameAda\n";17print "message=$messageHello, Ada\n";
    outputname=Ada
    message=Hello, Ada