Blame


1 1ddd2d4e 2023-09-10 jrmu #!/usr/bin/perl
2 1ddd2d4e 2023-09-10 jrmu
3 1ddd2d4e 2023-09-10 jrmu # Write a program to read in a list of patterns from a file. Precompile the
4 1ddd2d4e 2023-09-10 jrmu # patterns and store them in an array. For example, your patterns file
5 1ddd2d4e 2023-09-10 jrmu # might look like:
6 1ddd2d4e 2023-09-10 jrmu #
7 1ddd2d4e 2023-09-10 jrmu # cocoa?n[ue]t
8 1ddd2d4e 2023-09-10 jrmu # Mary[-\s]+Anne?
9 1ddd2d4e 2023-09-10 jrmu # (The\s+)?(Skipper|Professor)
10 1ddd2d4e 2023-09-10 jrmu #
11 1ddd2d4e 2023-09-10 jrmu # Prompt the user for lines of input, printing the line number and text for
12 1ddd2d4e 2023-09-10 jrmu # each line that matches. The $. variable is useful here.
13 1ddd2d4e 2023-09-10 jrmu
14 1ddd2d4e 2023-09-10 jrmu use v5.24;
15 1ddd2d4e 2023-09-10 jrmu use warnings;
16 1ddd2d4e 2023-09-10 jrmu use strict;
17 1ddd2d4e 2023-09-10 jrmu use utf8;
18 1ddd2d4e 2023-09-10 jrmu use local::lib;
19 1ddd2d4e 2023-09-10 jrmu use Getopt::Std;
20 1ddd2d4e 2023-09-10 jrmu
21 1ddd2d4e 2023-09-10 jrmu my %opts;
22 1ddd2d4e 2023-09-10 jrmu getopt("p:", \%opts);
23 1ddd2d4e 2023-09-10 jrmu if (defined($opts{p}) && scalar(%opts) == 1) {
24 1ddd2d4e 2023-09-10 jrmu open my $fh, "<", $opts{p} or die "Unable to open '$opts{p}': $!";
25 1ddd2d4e 2023-09-10 jrmu my @patterns;
26 1ddd2d4e 2023-09-10 jrmu while (<$fh>) {
27 1ddd2d4e 2023-09-10 jrmu chomp;
28 1ddd2d4e 2023-09-10 jrmu push @patterns, eval { qr/$_/ };
29 1ddd2d4e 2023-09-10 jrmu }
30 1ddd2d4e 2023-09-10 jrmu print "Type some input:\n\n";
31 1ddd2d4e 2023-09-10 jrmu while (<>) {
32 1ddd2d4e 2023-09-10 jrmu print "$.: $_" if $_ ~~ @patterns;
33 1ddd2d4e 2023-09-10 jrmu }
34 1ddd2d4e 2023-09-10 jrmu } else {
35 1ddd2d4e 2023-09-10 jrmu die "Usage: $0 -p file";
36 1ddd2d4e 2023-09-10 jrmu }