340 likes | 355 Views
Programming Perls*. Objective: To introduce students to the perl language. Perl is a language for getting your job done. Making Easy Things Easy & Hard Things Possible Perl is a language for easily manipulating text, files, and processes Combines concepts from unix, sed, awk, shell scripts
E N D
Programming Perls* • Objective: To introduce students to the perl language. • Perl is a language for getting your job done. • Making Easy Things Easy & Hard Things Possible • Perl is a language for easily manipulating text, files, and processes • Combines concepts from unix, sed, awk, shell scripts • Language of system administrators, web developers and more… • Practical Extraction and Report Language • Pathologically Eclectic Rubbish Lister *Many of the examples in this lecture come from “Learning Perl”, 3rd Ed, R. Schwartz & T. Phoenix, O’Reilly, 2001
Topics • Getting Started • scalars • lists and arrays • hashes • I/O • File handles • regular expressions
Hello, World! #!/usr/bin/perl print "Hello, World!\n"; #!/usr/bin/perl @lines = `perldoc -u -f atan2`; foreach (@lines) { s/(\w)<([^>]+)>/$1<\U$2>/g; print; }
A More Complicated Example #!/usr/bin/perl -w open(FIND,"find . -print |") || die "Couldn't run find: $!\n"; FILE: while ($filename = <FIND>) { chomp($filename); next FILE unless -T $filename; if (!open(TEXTFILE, $filename)) { print STDERR "Can't open $filename--continuing...\n"; next FILE; } while (<TEXTFILE>) { foreach $word (@ARGV) { if (index($_,$word) >= 0) { print "$filename: $word\n"; next; } } } }
Getting Help • man perl • perldoc • Learning Perl • Programming Perl • www.cpan.org, www.pm.org, www.perlmonks.org
scalars • numbers: 3, 3.14159, 7.24e15 • strings: ‘fred’, “barney”, “hello\n” • variables: $name, $count • assignment: $name = ‘fred’; $count = 1; $count += 1; $name = $fred . ‘flinstone’; • special variables: $_
operators • numbers • 2+3, 5.1-2.4, 3 * 12, 14/2, 10/3 • ==, !=, <, >, <=, >= • strings • concatenation: str1 . str2 • replication: str x num • eq, ne, lt, gt, le, ge
print • single vs. double quotes • ‘$firstname flinstone’ • “$firstname flinstone” • print “My name is $name\n” • print $firstname, $lastname, “\n” • STDOUT, STDERR
Conditionals • Boolean value (any scalar value) • false: undef, 0, ‘’, ‘0’ • true: everything else $count = 10; if ($count > 0) { print $count, “\n”; $count -= 1; } else { print “blast off\n”; }
Loops $count =10; while ($count > 0) { print $count, “\n”; $count -= 1; } print “blast off\n”;
Getting User Input • line input operator: <STDIN> • $line = <STDIN> # includes \n • chomp removes \n • chomp($line)
Sum Odd Numbers #!/usr/bin/perl #Add up some odd numbers $n = 1; print "How many odd numbers do you want to add? "; $howmany = <STDIN>; chomp($howmany); while ($n <= $howmany) { $sum += 2*$n - 1; $n += 1; } print "The sum of the first $howmany odd numbers = $sum\n";
Exercise 2.1 • Write a program that computes the circumference of a circle with radius 12.5. Use $pi = 3.141592654
Exercise 2.2 • Modify the previous program to prompt and read the radius
Exercise 2.3 • Modify the previous program so that if the radius is less than zero, the circumference is set to zero.
Exercise 2.4 • Write a program that prompts for and reads two numbers, on separate lines, and prints their product.
Exercise 2.5 • Write a program that prompts for and reads a string and a number (on separate lines) and prints the string the number of times indicated by the number (on separate lines).
Arrays and Lists • Used interchangeably • List variables @name • List literals (“fred”,2,3) • @primes = (2,3,5,7,11,13,17) • @range = 1..10 • Accessing elements: $primes[3] • Length of a list: $#primes • List assignment: ($p1, $p2, $p3) = (2,3,5)
List Operators • @array = 1..5; • The pop operator removes the last element of a list • $last = pop(@array); • @array = (1,2,3,4); $last=5 • The push operator appends an element to the end of a list • push(@array,5); • @array = (1,2,3,4,5)
List Operators • @array = 1..5; • The shift operator removes the first element of a list • $first = shift(@array); • $first = 1; @array = (2,3,4,5) • The unshift operator prepends an element to the beginning of a list • unshift(@array,1); • @array = (1,2,3,4,5)
List Operators • @array = 1..5; • The reverse operator reverses the elements of a list • @rarray = reverse(@array); • The sort operator sorts the elements of a list • @sarray = sort(@rarray); • @students = (“Sam”, “Fred”, “Anna”, “Sue”); • print sort(@students);
foreach Control Structure foreach $i (1..10) { print “$i\n”; } foreach (1..10) { print “$_\n”; }
Reading Lines #!/usr/bin/perl chomp(@lines = <STDIN>); # read lines, not newlines foreach $line (@lines) { print "$line\n"; }
Exercise 3.1 • Write a program that reads a list of strings on separate lines until end-of-input and prints the list in reverse order.
Exercise 3.2 • Write a program that reads a list of numbers on separate lines until end-of-input and then prints for each number the corresponding person’s name from the list • fred betty barney dino wilma pebbles bamm-bamm
Exercise 3.3 • Write a program that reads a list of strings on separate lines until the end-of-input. Then it should print the strings in alphabetical order.
Hashes • An array that can be indexed by arbitrary strings • $family_name{“fred”} = “flinstone; • $family_name{“barney”} = “rubble”; foreach $person in ($barney, $fred) { print “Full name = $family_name{$person}\n”; }
Hashes • The hash as a whole is referred to by a variable whose name starts with % • %hash = (“barney”, “rubble”, “fred”, “flinstone”); • %hash =(“barney” => “rubble”, • “fred” => “flinstone”); • @key-value-list = %hash
Hashes • To obtain the keys in a hash • @first_names = keys(%hash); • To obtain the values in a hash • @last_names = values(%hash);
The each Function • You can loop over the key-value pairs in a hash while ( ($key, $value) = each %hash ) { print “$key => $value\n”; } • The order is not specified – use sort if you care. foreach $key (sort keys %hash) { $value = $hash{$key}; print “$key => $value\n”; }
The exists Function • You can query to see if an entry with a given key has been inserted into a hash if (exists $last_name{$person}) { print “$person has a last name\n”; }
Deleting Entries from a Hash • delete($family_name{fred});
Exercise 5.1 • Write a program that will ask the user for a given name and report the corresponding family name.
Exercise 5.2 • Write a program that reads a series of words (with one word per line) until end-of-input, then prints a summary of how many times each word was seen.