$24
Introduction
Lab 7 is the first and simplest Perl script that filters data presented on STDIN, changing all occurrences of a FROMSTRING string to a TOSTRING and outputting all input lines, changed and unchanged to STDOUT. FROMSTRING and TOSTRING can be ordinary text or PERL-compatible regular expressions.
Requirements
Your Perl script shall be named filter.pl and be marked executable.
Usage: ./filter.pl ‘FROMSTRING’ ‘TOSTRING’
Example, where we read SOMEFILE and change all occurrences of FOO to BAR
cat SOMEFILE | ./filter.pl 'FOO' 'BAR'
Your script should read only from STDIN and write only to STDOUT. Write error messages only to STDERR. Your script should never prompt the user or open any files.
Your script should support regular expressions and be capable of changing all occurrences of the FROMSTRING to TOSTRING . All lines are output, both changed and unchanged. exit(0) if there are no errors. It is ok for nothing on the input to be changed as they are output.
Issue a Usage message and exit(1) if there are not exactly two commandline parameters provided.
Helpful Hints
Use /usr/bin/perl on icarus as your "shebang". use while (<STDIN) to read each line of input Use $_ to access each line read
use s/// (the substitution operator) to change all occurrences of FROMSTRING to TOSTRING on each line
Use print to output all line on STDIN to STDOUT, whether or not the line was changed
$ARGV[] contains the commandline arguments. For example, $ARGV[0] is the first argument,
FROMSTRING
$#ARGV is the index of the last item in $ARGV
s/$ARGV[0]/eval qq("$ARGV[1]")/ge;
Clone your private repo on github.com
In the assignment module in Canvas, find the link to the Canvas page entitled "Clone your Lab 7 Repo", click on it and follow the instructions.
Copy your private repo down to icarus
BASH
git clone https://github.com/cowancs3030spring19/lab7-YOURGITHUBUSERNAME
cd lab7-YOURGITHUBUSERNAME
Write and test filter.pl
Fire up your favorite text editor, and update the header:
#!/usr/bin/perl
TEXT
(Your name)
Lab 7 - Perl Filter
CS 3030 - Scripting Languages
(add your unbelievably elegant code here)
Run cucumber to check your progress
./cucumber -s
Submit your assignment code for grading
Remember, you must push your script in your private repo to github.com to receive any points, for all assignments in this course.
BASH
git add filter.pl
git commit -m"COMMIT MESSAGE"
git push origin master
Files changed for this lab
filter.pl
Grading
Here is how you earn points for this assignment:
FEATURES
POINTS
Must-Have Features
Script is named correctly and found in its proper place in your private repo
5
Script is executable
5
Required Features
Script prints a “Usage:” statement and exits rc=1 if there are not exactly two
5
commandline parameters
Script exits rc=0 on successful completion
5
Script reads from STDIN
10
Script writes to STDOUT unless error
10
Script writes error messages only to STDERR
10
Script properly translates the input to the output using a simple string replacement
10
Script supports regular expressions in FROMSTRING
20
Script supports regular expressions in FROMSTRING and TOSTRING
20
Grand Total
100