Free Trial

Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.

  • Create BookmarkCreate Bookmark
  • Create Note or TagCreate Note or Tag
  • PrintPrint
Share this Page URL
Help

A. Exercise Answers > Answers to Chapter 14 Exercises

Answers to Chapter 14 Exercises

  1. Here’s one way to do it:

    my @numbers;
    push @numbers, split while <>;
    foreach (sort { $a <=> $b } @numbers) {
      printf "%20g\n", $_;
    }

    That second line of code is too confusing, isn’t it? Well, we did that on purpose. Although we recommend that you write clear code, some people like writing code that’s as hard to understand as possible,[414] so we want you to be prepared for the worst. Someday, you’ll need to maintain confusing code like this.

    Since that line uses the while modifier, it’s the same as if it were written in a loop like this:

    while (<>) {
      push @numbers, split;
    }

    That’s better, but maybe it’s still a little unclear. (Nevertheless, we don’t have a quibble about writing it this way. This one is on the correct side of the “too hard to understand at a glance” line.) The while loop is reading the input one line at a time (from the user’s choice of input sources, as shown by the diamond operator), and split is, by default, splitting that on whitespace to make a list of words—or in this case, a list of numbers. The input is just a stream of numbers separated by whitespace, after all. Either way you write it, then, that while loop will put all of the numbers from the input into @numbers.


  

You are currently reading a PREVIEW of this book.

                                                                                                                    

Get instant access to over $1 million worth of books and videos.

  

Start a Free Trial


  
  • Safari Books Online
  • Create BookmarkCreate Bookmark
  • Create Note or TagCreate Note or Tag
  • PrintPrint