oh, I figured they should have used @ARGV, but this is a quote from them in the answer:
my @numbers;
push @numbers, split while <>;
foreach (sort { $a <=>$b } @numbers) {
printf "%20g\n", $_;
}
then later in the explanation of the answer:
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.
The instructions in the exercise are:
Write a program to read in a list of numbers and sort them numerically
+, printing out the resulting list in a right-justified column. Try it
+ out on this sample data:
17 1000 04 1.50 3.14159 –10 1.5 4 2001 90210 666
unless I'm reading it wrong and they actually wanted it in a file. I was assuming it was supposed to be as command line options. That's certainly possible, as I'm still new to all this! ;} | [reply] [d/l] [select] |
Yes, it does want the numbers as a file, rather than as command line arguments. If you make a numbers.txt file with all the numbers, then use numbers.txt as the only argument to your program, it does what it's supposed to.
The diamond operator <> lets you choose what to use for input in the arguments to your program. When you leave it empty, it will wait for user input. With a program like this one, it doesn't tell you that it's waiting for something, which was surprising when I did this exercise myself a couple of months ago :)
| [reply] [d/l] [select] |