Chapter 11. Building Larger Programs
As our programs get larger, we start to realize that some of our code applies to other jobs we have. We can move some of that code to a library that we can share among several programs, and even with other people. We can also use libraries to compartmentalize code by its function or use, keeping it separate from code that does unrelated tasks.
The Cure for the Common Code
The Skipper writes many Perl programs to provide navigation for all the common ports of call for the Minnow. He finds himself cutting and pasting a very common routine into each program:
sub
turn_toward_heading
{
my
$new_heading
=
shift
;
my
$current_heading
=
current_heading
(
);
"Current heading is "
,
$current_heading
,
".\n"
;
"Come about to $new_heading "
;
my
$direction
=
'right'
;
my
$turn
=
(
$new_heading
−
$current_heading
)
%
360
;
if
(
$turn
>
180
)
{
# long way around
$turn
=
360
−
$turn
;
$direction
=
'left'
;
}
"by turning $direction $turn degrees.\n"
;
}
This routine gives the shortest turn to make from the current
heading returned by the subroutine current_heading
to a new heading given as the
first parameter to the subroutine.
The first line of this subroutine might have read instead:
my
(
$new_heading
)
=
@_
;
This is mostly a style call: in both cases, the first parameter ends
up in $new_heading
. However, removing
the items from @_
as they are identified does have some advantages. So, we stick (mostly) with the “shifting” style of argument parsing. Now back to the ...
Get Intermediate Perl, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.