CSCI 344
File I/O in Perl
Lab 10
Write the following Perl scripts. You may use the Internet as a
reference for Perl and as a reference for UNIX/Linux
commands, but you may not search for
solutions to these problems--that would completely defeat the purpose
of doing them.
Here is a link to a good intro to Perl: perldoc.perl.org/perlintro.html
You may NOT use any UNIX/Linux command or utility to solve these problems. They can all be solved with basic Perl.
1) (weight 2) Write a Perl subroutine
for each of the following descriptions. You will have to write
code to test your subroutines and to demonstrate to me that they work.
a) Returns the number of arguments to the subroutine.
b) Returns a list of all the arguments sorted alphabetically.
c) Returns a list of all the arguments with duplicates removed.
2) (weight 3) Write a program that echoes input lines with line numbers:
Input:
first line
second line
third line
...
last line
Output:
1 first line
2 second line
3 third line
999 last line
Right justify the line numbers and pad them according to the size of
the input. That is if there are more than 9 lines, pad all the
numbers so they print in 2-columns, if there are more than 99 lines,
pad the numbers so they print in 3-columns, and so forth.
If arguments are given on the command line, assume they are all
filenames and read all of them sequentially. If no arguments are
given, read from standard input.
Hint: Perl makes this behavior very, very easy to implement, but
don't blurt out the answer so other students have to remember or find
it.
3) (weight 3) Write a script that reads one
or more files containing comma-separated-values (.csv) and print them
in tabular form. For example:
Input:
a,b,c,d,e
1,2,3,4,5
v,w,x,y,z
Output:
a b c d e
1 2 3 4 5
v w x y z
As a default, make all the columns 5 characters wide. If the
first command line argument starts with a -, assume it is an integer
that specifies the column with. Except for the possibility of a
column width as the first command line
argument, all the other command line arguments should be files:
$ tprint data1.csv data2.csv
$ tprint -10 data1.csv data2.csv
If no command line arguments are specified, do nothing.
The function split, which splits a string into elements, is very helpful
@elements = split /,/, $line;
Using a pattern makes it easier to check if the first command line argument is a - followed by a digit.