Programming Perls Objective To introduce students to the
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”, 3 rd 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 atan 2`; 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: $wordn"; next; } }
Getting Help • • • man perldoc Learning Perl Programming Perl www. cpan. org, www. pm. org, www. perlmonks. org
scalars • • numbers: 3, 3. 14159, 7. 24 e 15 strings: ‘fred’, “barney”, “hellon” 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: str 1. str 2 – replication: str x num – eq, ne, lt, gt, le, ge
print • single vs. double quotes – ‘$firstname flinstone’ – “$firstname flinstone” • print “My name is $namen” • 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 offn”; }
Loops $count =10; while ($count > 0) { print $count, “n”; $count -= 1; } print “blast offn”;
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 = $sumn";
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: ($p 1, $p 2, $p 3) = (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 “$in”; } foreach (1. . 10) { print “$_n”; }
Reading Lines #!/usr/bin/perl chomp(@lines = <STDIN>); # read lines, not newlines foreach $line (@lines) { print "$linen"; }
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
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 => $valuen”; } • The order is not specified – use sort if you care. foreach $key (sort keys %hash) { $value = $hash{$key}; print “$key => $valuen”; }
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 namen”; }
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.
- Slides: 34