Package-Based Object Patterns
Private Helpers
Use lexical package data to hide a formatting detail.
private-helpers
Lexical variables inside a package can keep helper details away from callers.
Private Helpers
private_helpers.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;
package TicketLabel;
my $prefix = "ticket";
sub label {
my ($number) = @_;
return "$prefix-$number";
}
package main;
my $number = 7;
my $label = TicketLabel::label($number);
print "number=$number\n";
print "label=$label\n";
use strict;
use warnings;
package TicketLabel;
my $prefix = "ticket";
sub label {
my ($number) = @_;
return "$prefix-$number";
}
package main;
my $number = 3;
my $label = TicketLabel::label($number);
print "number=$number\n";
print "label=$label\n";
use strict;
use warnings;
package TicketLabel;
my $prefix = "ticket";
sub label {
my ($number) = @_;
return "$prefix-$number";
}
package main;
my $number = 12;
my $label = TicketLabel::label($number);
print "number=$number\n";
print "label=$label\n";
$prefix ← ticket, $number ← 7
6my $prefix→ ticket = "ticket";78sub label {9 my ($number) = @_;10 return "$prefix-$number";11}1213package main;1415my $number→ 7 = 7; #@number=3, 1216my $label = TicketLabel::label($number7);$number ← 7
8sub label {9 my ($number→ 7) = @_;10 return "$prefixticket-$number7";11}$label ← ticket-7
15my $number = 7; #@number=3, 1216my $label→ ticket-7 = TicketLabel::label($number7);1718print "number=$number7\n";19print "label=$labelticket-7\n";outputnumber=7 label=ticket-7
$prefix ← ticket, $number ← 3
6my $prefix→ ticket = "ticket";78sub label {9 my ($number) = @_;10 return "$prefix-$number";11}1213package main;1415my $number→ 3 = 3;16my $label = TicketLabel::label($number3);$number ← 3
8sub label {9 my ($number→ 3) = @_;10 return "$prefixticket-$number3";11}$label ← ticket-3
15my $number = 3;16my $label→ ticket-3 = TicketLabel::label($number3);1718print "number=$number3\n";19print "label=$labelticket-3\n";outputnumber=3 label=ticket-3
$prefix ← ticket, $number ← 12
6my $prefix→ ticket = "ticket";78sub label {9 my ($number) = @_;10 return "$prefix-$number";11}1213package main;1415my $number→ 12 = 12;16my $label = TicketLabel::label($number12);$number ← 12
8sub label {9 my ($number→ 12) = @_;10 return "$prefixticket-$number12";11}$label ← ticket-12
15my $number = 12;16my $label→ ticket-12 = TicketLabel::label($number12);1718print "number=$number12\n";19print "label=$labelticket-12\n";outputnumber=12 label=ticket-12