Package-Based Object Patterns
Label Factory
Collect input fields into a stable label.
label-factory
A factory-style routine can gather values and return a formatted label.
Label Factory
label_factory.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;
package UserRecord;
sub make_label {
my ($name, $role) = @_;
return "user:$name:$role";
}
package main;
my $role = "reader";
my $name = "Nia";
my $label = UserRecord::make_label($name, $role);
print "name=$name\n";
print "role=$role\n";
print "label=$label\n";
use strict;
use warnings;
package UserRecord;
sub make_label {
my ($name, $role) = @_;
return "user:$name:$role";
}
package main;
my $role = "editor";
my $name = "Nia";
my $label = UserRecord::make_label($name, $role);
print "name=$name\n";
print "role=$role\n";
print "label=$label\n";
use strict;
use warnings;
package UserRecord;
sub make_label {
my ($name, $role) = @_;
return "user:$name:$role";
}
package main;
my $role = "admin";
my $name = "Nia";
my $label = UserRecord::make_label($name, $role);
print "name=$name\n";
print "role=$role\n";
print "label=$label\n";
$role ← reader, $name ← Nia
13my $role→ reader = "reader"; #@role="editor", "admin"14my $name→ Nia = "Nia";15my $label = UserRecord::make_label($nameNia, $rolereader);$name ← Nia, $role ← reader
6sub make_label {7 my ($name→ Nia, $role→ reader) = @_;8 return "user:$nameNia:$rolereader";9}$label ← user:Nia:reader
14my $name = "Nia";15my $label→ user:Nia:reader = UserRecord::make_label($nameNia, $rolereader);1617print "name=$nameNia\n";18print "role=$rolereader\n";19print "label=$labeluser:Nia:reader\n";outputname=Nia role=reader label=user:Nia:reader
$role ← editor, $name ← Nia
13my $role→ editor = "editor";14my $name→ Nia = "Nia";15my $label = UserRecord::make_label($nameNia, $roleeditor);$name ← Nia, $role ← editor
6sub make_label {7 my ($name→ Nia, $role→ editor) = @_;8 return "user:$nameNia:$roleeditor";9}$label ← user:Nia:editor
14my $name = "Nia";15my $label→ user:Nia:editor = UserRecord::make_label($nameNia, $roleeditor);1617print "name=$nameNia\n";18print "role=$roleeditor\n";19print "label=$labeluser:Nia:editor\n";outputname=Nia role=editor label=user:Nia:editor
$role ← admin, $name ← Nia
13my $role→ admin = "admin";14my $name→ Nia = "Nia";15my $label = UserRecord::make_label($nameNia, $roleadmin);$name ← Nia, $role ← admin
6sub make_label {7 my ($name→ Nia, $role→ admin) = @_;8 return "user:$nameNia:$roleadmin";9}$label ← user:Nia:admin
14my $name = "Nia";15my $label→ user:Nia:admin = UserRecord::make_label($nameNia, $roleadmin);1617print "name=$nameNia\n";18print "role=$roleadmin\n";19print "label=$labeluser:Nia:admin\n";outputname=Nia role=admin label=user:Nia:admin