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(  );
  print "Current heading is ", $current_heading, ".\n";
  print "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';
  }
  print "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 ...

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.