Answer to Chapter 17 Exercises
- Here's one way to do it:
my $filename = 'path/to/sample_text'; open FILE, $filename or die "Can't open '$filename': $!"; chomp(my @strings = <FILE>); while (1) { print "Please enter a pattern: "; chomp(my $pattern = <STDIN>); last if $pattern =~ /^\s*$/; my @matches = eval { grep /$pattern/, @strings; }; if ($@) { print "Error: $@"; } else { my $count = @matches; print "There were $count matching strings:\n", map "$_\n", @matches; } print "\n"; }This one uses an
evalblock to trap any failure that might occur when using the regular expression. Inside that block, agreppulls the matching strings from the list of strings.Once the
evalis finished, we can report either the error message or the matching strings. Note that we "unchomped" the strings for output by usingmapto add a newline to each string .