Subroutines and Arguments
Subroutine Basics
A subroutine gives a group of statements a name so the program can call it when needed.
subroutine
A subroutine is a named block of reusable Perl code.
Subroutine Basics
subroutine_basics.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;
sub make_greeting {
my ($name) = @_;
my $message = "Hello, $name";
return $message;
}
my $name = "Perl";
my $greeting = make_greeting($name);
print "name=$name\n";
print "greeting=$greeting\n";
use strict;
use warnings;
sub make_greeting {
my ($name) = @_;
my $message = "Hello, $name";
return $message;
}
my $name = "Mira";
my $greeting = make_greeting($name);
print "name=$name\n";
print "greeting=$greeting\n";
use strict;
use warnings;
sub make_greeting {
my ($name) = @_;
my $message = "Hello, $name";
return $message;
}
my $name = "Ada";
my $greeting = make_greeting($name);
print "name=$name\n";
print "greeting=$greeting\n";
$name ← Perl
10my $name→ Perl = "Perl"; #@name="Mira", "Ada"11my $greeting = make_greeting($namePerl);$name ← Perl, $message ← Hello, Perl
4sub make_greeting {5 my ($name→ Perl) = @_;6 my $message→ Hello, Perl = "Hello, $namePerl";7 return $messageHello, Perl;8}$greeting ← Hello, Perl
10my $name = "Perl"; #@name="Mira", "Ada"11my $greeting→ Hello, Perl = make_greeting($namePerl);1213print "name=$namePerl\n";14print "greeting=$greetingHello, Perl\n";outputname=Perl greeting=Hello, Perl
$name ← Mira
10my $name→ Mira = "Mira";11my $greeting = make_greeting($nameMira);$name ← Mira, $message ← Hello, Mira
4sub make_greeting {5 my ($name→ Mira) = @_;6 my $message→ Hello, Mira = "Hello, $nameMira";7 return $messageHello, Mira;8}$greeting ← Hello, Mira
10my $name = "Mira";11my $greeting→ Hello, Mira = make_greeting($nameMira);1213print "name=$nameMira\n";14print "greeting=$greetingHello, Mira\n";outputname=Mira greeting=Hello, Mira
$name ← Ada
10my $name→ Ada = "Ada";11my $greeting = make_greeting($nameAda);$name ← Ada, $message ← Hello, Ada
4sub make_greeting {5 my ($name→ Ada) = @_;6 my $message→ Hello, Ada = "Hello, $nameAda";7 return $messageHello, Ada;8}$greeting ← Hello, Ada
10my $name = "Ada";11my $greeting→ Hello, Ada = make_greeting($nameAda);1213print "name=$nameAda\n";14print "greeting=$greetingHello, Ada\n";outputname=Ada greeting=Hello, Ada
Follow the Call
$namestarts asPerl.make_greeting($name)passes that value into the subroutine.- Inside the subroutine,
$nameis read from@_. $messagebecomesHello, Perl.- The caller stores that returned text in
$greeting. | value | where it goes | result | | --- | --- | --- | | Perl | subroutine argument |$name| | Hello, Perl | returned value |$greeting|
Exercise: subroutine_basics.pl
Reproduce name=Perl and greeting=Hello, Perl, then use the pinned name variants Mira and Ada to predict greeting=Hello, Mira and greeting=Hello, Ada.