Subroutines and Arguments
Lexical Variables
Variables declared with my inside a subroutine stay local to that subroutine.
lexical variable
A lexical variable belongs to the block where it is declared.
Lexical Variables
lexical_variables.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;
sub add_bonus {
my ($base, $bonus) = @_;
my $inside_total = $base + $bonus;
return $inside_total;
}
my $base = 10;
my $bonus = 3;
my $result = add_bonus($base, $bonus);
print "base=$base\n";
print "bonus=$bonus\n";
print "result=$result\n";
use strict;
use warnings;
sub add_bonus {
my ($base, $bonus) = @_;
my $inside_total = $base + $bonus;
return $inside_total;
}
my $base = 10;
my $bonus = 0;
my $result = add_bonus($base, $bonus);
print "base=$base\n";
print "bonus=$bonus\n";
print "result=$result\n";
use strict;
use warnings;
sub add_bonus {
my ($base, $bonus) = @_;
my $inside_total = $base + $bonus;
return $inside_total;
}
my $base = 10;
my $bonus = 5;
my $result = add_bonus($base, $bonus);
print "base=$base\n";
print "bonus=$bonus\n";
print "result=$result\n";
$base ← 10, $bonus ← 3
10my $base→ 10 = 10;11my $bonus→ 3 = 3; #@bonus=0, 512my $result = add_bonus($base10, $bonus3);$base ← 10, $bonus ← 3, $inside_total ← 13
4sub add_bonus {5 my ($base→ 10, $bonus→ 3) = @_;6 my $inside_total→ 13 = $base10 + $bonus3;7 return $inside_total13;8}$result ← 13
11my $bonus = 3; #@bonus=0, 512my $result→ 13 = add_bonus($base10, $bonus3);1314print "base=$base10\n";15print "bonus=$bonus3\n";16print "result=$result13\n";outputbase=10 bonus=3 result=13
$base ← 10, $bonus ← 0
10my $base→ 10 = 10;11my $bonus→ 0 = 0;12my $result = add_bonus($base10, $bonus0);$base ← 10, $bonus ← 0, $inside_total ← 10
4sub add_bonus {5 my ($base→ 10, $bonus→ 0) = @_;6 my $inside_total→ 10 = $base10 + $bonus0;7 return $inside_total10;8}$result ← 10
11my $bonus = 0;12my $result→ 10 = add_bonus($base10, $bonus0);1314print "base=$base10\n";15print "bonus=$bonus0\n";16print "result=$result10\n";outputbase=10 bonus=0 result=10
$base ← 10, $bonus ← 5
10my $base→ 10 = 10;11my $bonus→ 5 = 5;12my $result = add_bonus($base10, $bonus5);$base ← 10, $bonus ← 5, $inside_total ← 15
4sub add_bonus {5 my ($base→ 10, $bonus→ 5) = @_;6 my $inside_total→ 15 = $base10 + $bonus5;7 return $inside_total15;8}$result ← 15
11my $bonus = 5;12my $result→ 15 = add_bonus($base10, $bonus5);1314print "base=$base10\n";15print "bonus=$bonus5\n";16print "result=$result15\n";outputbase=10 bonus=5 result=15