Appendix A. Answers to Exercises

This appendix contains the answers to the exercises presented throughout the book.

Answers for Chapter 2

Exercise 1 (Section 2.10.1)

Here’s one way to do it. First, start with the package directive and use strict:

package Oogaboogoo::date;
use strict;

Then define the constant arrays to hold the mappings for day-of-week and month names:

my @day = qw(ark dip wap sen pop sep kir);
my @mon = qw(diz pod bod rod sip wax lin sen kun fiz nap dep);

Next, define the subroutine for day-of-week-number to name. Note that this subroutine will be accessible as Ooogaboogoo::date::day:

sub day {
  my $num = shift @_;
  die "$num is not a valid day number"
    unless $num >= 0 and $num <= 6;
  $day[$num];
}

Similarly, you have the subroutine for the month-of-year-number to name:

sub mon {
  my $num = shift @_;
  die "$num is not a valid month number"
    unless $num >= 0 and $num <= 11;
  $mon[$num];
}

Finally, the mandatory true value at the end of the package:

1;

Name this file date.pl within a directory of Oogaboogoo in one of the directories given in your @INC variable, such as the current directory.

Exercise 2 (Section 2.10.2)

Here’s one way to do it. Pull in the .pl file from a place in your @INC path:

use strict;
require 'Oogaboogoo/date.pl';

Then get the information for the current time:

my($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime;

Then use the newly defined subroutines for the conversions:

my $day_name = Oogaboogoo::date::day($wday); my $mon_name = Oogaboogoo::date::mon($mon); ...

Get Learning Perl Objects, References, and Modules 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.