A small hash can model named arguments when a subroutine has several options.

named argument A named argument pairs a key with a value so the call explains what each value means.

Named Arguments

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

sub build_badge {
    my (%args) = @_;
    my $name = $args{name};
    my $role = $args{role};
    my $badge = "$name:$role";
    return $badge;
}

my $role = "reader";
my $badge = build_badge(name => "Nora", role => $role);

print "role=$role\n";
print "badge=$badge\n";
use strict;
use warnings;

sub build_badge {
    my (%args) = @_;
    my $name = $args{name};
    my $role = $args{role};
    my $badge = "$name:$role";
    return $badge;
}

my $role = "editor";
my $badge = build_badge(name => "Nora", role => $role);

print "role=$role\n";
print "badge=$badge\n";
use strict;
use warnings;

sub build_badge {
    my (%args) = @_;
    my $name = $args{name};
    my $role = $args{role};
    my $badge = "$name:$role";
    return $badge;
}

my $role = "admin";
my $badge = build_badge(name => "Nora", role => $role);

print "role=$role\n";
print "badge=$badge\n";
  1. $role ← reader

    12my $role→ reader = "reader"; #@role="editor", "admin"13my $badge = build_badge(name => "Nora", role => $rolereader);
  2. %args ← 2, $name ← Nora, $role ← reader, $badge ← Nora:reader

    4sub build_badge {5    my (%args→ 2) = @_;6    my $name→ Nora = $args{name};7    my $role→ reader = $args{role};8    my $badge→ Nora:reader = "$nameNora:$rolereader";9    return $badgeNora:reader;10}
  3. $badge ← Nora:reader

    12my $role = "reader"; #@role="editor", "admin"13my $badge→ Nora:reader = build_badge(name => "Nora", role => $rolereader);1415print "role=$rolereader\n";16print "badge=$badgeNora:reader\n";
    outputrole=reader
    badge=Nora:reader
  1. $role ← editor

    12my $role→ editor = "editor";13my $badge = build_badge(name => "Nora", role => $roleeditor);
  2. %args ← 2, $name ← Nora, $role ← editor, $badge ← Nora:editor

    4sub build_badge {5    my (%args→ 2) = @_;6    my $name→ Nora = $args{name};7    my $role→ editor = $args{role};8    my $badge→ Nora:editor = "$nameNora:$roleeditor";9    return $badgeNora:editor;10}
  3. $badge ← Nora:editor

    12my $role = "editor";13my $badge→ Nora:editor = build_badge(name => "Nora", role => $roleeditor);1415print "role=$roleeditor\n";16print "badge=$badgeNora:editor\n";
    outputrole=editor
    badge=Nora:editor
  1. $role ← admin

    12my $role→ admin = "admin";13my $badge = build_badge(name => "Nora", role => $roleadmin);
  2. %args ← 2, $name ← Nora, $role ← admin, $badge ← Nora:admin

    4sub build_badge {5    my (%args→ 2) = @_;6    my $name→ Nora = $args{name};7    my $role→ admin = $args{role};8    my $badge→ Nora:admin = "$nameNora:$roleadmin";9    return $badgeNora:admin;10}
  3. $badge ← Nora:admin

    12my $role = "admin";13my $badge→ Nora:admin = build_badge(name => "Nora", role => $roleadmin);1415print "role=$roleadmin\n";16print "badge=$badgeNora:admin\n";
    outputrole=admin
    badge=Nora:admin