Sie sind auf Seite 1von 34

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, OReilly, 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
persons name from the list
fred betty barney dino wilma pebbles bammbamm

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} = flintstone;
$family_name{barney} = rubble;
foreach $person in keys( %family_name ) {
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.

Das könnte Ihnen auch gefallen