Pass a current value into a package routine and receive an updated value.

Package Calls

package_calls.pl
use strict;
use warnings;

package Counter;

sub add {
    my ($value, $step) = @_;
    return $value + $step;
}

package main;

my $step = ;
my $start = 10;
my $next = Counter::add($start, $step);

print "start=$start\n";
print "step=$step\n";
print "next=$next\n";
use strict;
use warnings;

package Counter;

sub add {
    my ($value, $step) = @_;
    return $value + $step;
}

package main;

my $step = ;
my $start = 10;
my $next = Counter::add($start, $step);

print "start=$start\n";
print "step=$step\n";
print "next=$next\n";
use strict;
use warnings;

package Counter;

sub add {
    my ($value, $step) = @_;
    return $value + $step;
}

package main;

my $step = ;
my $start = 10;
my $next = Counter::add($start, $step);

print "start=$start\n";
print "step=$step\n";
print "next=$next\n";
package-calls A package routine can receive state, perform work, and return the result.