Answer to Chapter 16 Exercise
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
eval
block to trap any failure that might occur when using the regular expression. Inside that block, agrep
pulls the matching strings from the list of strings.Once the
eval
is finished, we can report either the error message or the matching strings. We “unchomped” the strings for output by usingmap
to add a newline to each string.
Get Learning Perl, Fourth Edition 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.