CSc 265 Lab 9

Team Name:

Team Members:



1) What is the exact output of the following perl program if it's input is a file containing the following lines:
Perl is popular.
It is good for what it was intended, and it is
freely available (and available for free).

#!/public/bin/perl

while(<STDIN>) {
	chop;
	foreach (split(/ /)) {
		if (defined($aa{$_})) {
			$aa{$_}++;
		} else {
			$aa{$_} = 1;
		}
	}
}
foreach (sort(keys(%aa)))  {
	print "$_: $aa{$_}\n";
}


(and: 1
It: 1
Perl: 1
and: 1
available: 2
for: 2
free).: 1
freely: 1
good: 1
intended,: 1
is: 3
it: 2
popular.: 1
was: 1
what: 1

2) Modify the program from question 1 so that it is no longer case sensitive (interprets all input as lower case) and ignores non-alphanumeric characters.
Note: the Perl tr command is similar to the shell command of the same name. For example, tr/abc/012/ replaces every occurrence of "a" with "0", "b" with "1", and "c" with "2".


	change the 'foreach (split(/ /)) { line to:
		   'foreach (split(/W+/)) {

	and add the line 'tr/a-z/A-Z/ right before the if statement

3) What does the following Perl program do? Be as precise as possible. Why
is line 4 ($name = s/\*/.*/) necessary?
#!/public/bin/perl

chop($name = <STDIN>);
$name =~ s/\*/.*/;
&look($name,".");

sub look {
	local ($n,$dir) = @_;

	opendir(CURRENT,$dir);
	@list = readdir(CURRENT);
	closedir(CURRENT);

	foreach (sort @list) {
		$path = $dir.'/'.$_;

		if (-d $path) {
			if (-r $path && $_ ne '.' && $_ ne '..') {
				&look($n,$path);
			}
		} elsif (/^$n$/) {
			print "$path\n";
		}
	}
}

The program reads a string from STDIN. It then looks for all filenames with the same name in the current directory and the entire sub-directory tree, outputing the full path from the current directory to each of the files found. It does this in alphabetical order.
Line 4 is needed so that the input string can contain a * as a wildcard to be used in the unix fashion. Since the program uses a Perl regular expression, this must be converted to the Perl string ".*", which has the same meaning as the Unix "*".