[Appendix A] A.8 Chapter 9, Miscellaneous Control Structures
Author: Randal Schwartz, Tom Christiansen & Larry Wall
Date: 1999-07-02T01:36:57Z

#

| Appendix A Exercise Answers |

## A.8 Chapter 9, Miscellaneous Control Structures

1. Here's one way to do it:

       sub card {} # from previous exercise

       while () { ## NEW ##
           print "Enter first number: ";
           chomp($first = <STDIN>);
           last if $first eq "end"; ## NEW ##

           print "Enter second number: ";
           chomp($second = <STDIN>);
           last if $second eq "end"; ## NEW ##

           $message = &card($first) . " plus " .
               card($second) . " equals " .
               card($first+$second) . ".\n";
           print "\u$message";
       } ## NEW ##

   Note the addition of the `while` loop and the two `last` operators. That's it!

2. Here's one way to do it:

       {
         print "Enter a number (999 to quit): ";
         chomp($n = <STDIN>);
         last if $n == 999;
         $sum += $n;
         redo;
       }

       print "the sum is $sum\n";

   We're using a naked block with a `redo` and a `last` to get things done this time. Start by printing the prompt and grabbing the number. If it's 999, exit the block with `last` and print out the sum on exit. Otherwise, we add to our running total and use `redo` to execute the block again.

A.7 Chapter 8, Functions |  | A.9 Chapter 10, Filehandles and File Tests