Keep related state as named scalar values.

State Records

state_records.pl
use strict;
use warnings;

package Badge;

sub summary {
    my ($name, $level) = @_;
    return "$name:$level";
}

package main;

my $level = ;
my $name = "Rin";
my $summary = Badge::summary($name, $level);

print "name=$name\n";
print "level=$level\n";
print "summary=$summary\n";
use strict;
use warnings;

package Badge;

sub summary {
    my ($name, $level) = @_;
    return "$name:$level";
}

package main;

my $level = ;
my $name = "Rin";
my $summary = Badge::summary($name, $level);

print "name=$name\n";
print "level=$level\n";
print "summary=$summary\n";
use strict;
use warnings;

package Badge;

sub summary {
    my ($name, $level) = @_;
    return "$name:$level";
}

package main;

my $level = ;
my $name = "Rin";
my $summary = Badge::summary($name, $level);

print "name=$name\n";
print "level=$level\n";
print "summary=$summary\n";
state-records State is easier to reason about when each field has a clear name.