Appendix A. Answers to Exercises
This appendix contains the answers to the exercises presented throughout the book.
Answers for Chapter 2
Exercise 1
Here’s one way to do it. The command-line arguments show up in
the special array @ARGV,
so we use
that for our input list. The file test operator -s
works on $_
by default, and that’s just the current
element that grep
tests. All of the
files with a byte -size smaller than 1,000 bytes end up in @smaller_than_1000
. That array becomes the
input for the map,
which takes each
element and returns it with spaces tacked on the front and a newline
on the end.
#!/usr/bin/perl my @smaller_than_1000 = grep { -s < 1000 } @ARGV; print map { " $_\n" } @smaller_than_1000;
Typically we’ll do that without the intermediate array, though.
print map { " $_\n" } grep { -s < 1000 } @ARGV;
Exercise 2
We chose to use our home directory as the hardcoded directory.
When we call chdir
without an
argument, it goes to our home directory (so this is one of the few
places where Perl doesn’t use $_
as
the default).
After that, an infinite while
loop keeps our code running, at least until we can’t satisfy the
condition to last
that breaks us
out of the loop. Look at the condition carefully: we don’t just test
for truth. What would happen if we wanted to find all the files with a
0
in them? We look for defined
values with a nonzero length, so undef
(end of input) and the empty string
(simply hitting enter) stop the loop.
Once we have our regular expression, we do that same thing ...
Get Intermediate Perl 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.