O'Reilly logo

Learning Perl, Fourth Edition by brian d foy, Tom Phoenix, Randal L. Schwartz

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Answers to Chapter 13 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 confusing, isn’t it? We did that on purpose. Though we recommend you write clear code, some people like writing code that’s as hard to understand as possible,[375] 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 still 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 a line at a time (from the user’s choice of input sources, as shown by the diamond operator). The 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, that while loop will put all of the numbers from the input into @numbers.

    The foreach loop takes the sorted list and prints each one on its own line, using the %20g numeric format to put them in a right-justified column. You could have used %20s instead. What difference would that make? That’s a string format, so it would have left the strings untouched in the output. Did you ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required