160 likes | 280 Views
CSC 4630. Perl 2 adapted from R. E. Beck. I/O and Arithmetic. Form pairs of programmer/investigator/discover
E N D
CSC 4630 Perl 2 adapted from R. E. Beck
I/O and Arithmetic • Form pairs of programmer/investigator/discover Exercise 1. Write a program that prompts the user for a number, representing the radius of a sphere. The program prints out the volume of the sphere. (Note:B to 10 significant figures is 3.141592654)
Operator x Exercise 2. Write a program that prompts the user for a (short) string and a positive integer and outputs the string repeated the number of times indicated. For example, with input ha 4 the program gives hahahaha Exercise 3. Modify the previous program to print the output on separate lines, one for each instance of the input string.
Arrays in PERL • Look much like lists from LISP except elements must be scalars. • Size does not need to be specified initially. • Use length as a descriptive measure. • Values can be specified by list literals.
List Literals Several forms: • Values separated by commas enclosed in parentheses. • (3.4, 5.6, 8.1, 0) • (“fred”, “george”, 1, 3) • Values can be determined by expressions, which are evaluated when the literal is used. • ($a, $b, $a+$b, $a-$b)
List Literals (2) • The empty list, denoted by () • Values generated by the list constructor operatordenoted by .. • (1 .. 5) generates the list (1, 2, 3, 4, 5) • (2.2 .. 5.7) generates the list (2.2, 3.2, 4.2, 5.2) • (0 .. 4, 8, 9) generates the list (0, 1, 2, 3, 4, 8, 9) • Values generated by the quote word function • qw(alice bob chuck) generates the list (“alice”, “bob”, “chuck”)
Array Variable • Holds a single list value, meaning zero or more scalar values. • Name starts with @ (rather than $). • Can be treated as a whole by certain array operators and array functions. (Similar to LISP or APL)
Array Operators • Assignment • @a = (8, @a) # Appends 8 as the first element of @a. • @fred = qw(one two) • @barney = (4, 5, @fred, 8, 9) # Makes @barney have the value (4, 5, “one”, “two”, 8, 9) • ($a, $b, $c) = (1, 2, 3) # Simultaneous scalar assignment • ($a, $b) = ($b, $a) # Swap values (temporary location is hidden)
Array Operators (2) Fancier assignment statements • Embedded array ($d, @fred) = ($a, $b, $c) $d becomes the value of $a @fred becomes ($b, $c) • Array sharing, array decomposition ($e, @fred) = @fred $e becomes the first element of @fred @fred becomes tail(@fred)
Array Operators (3) • Length mismatches • Too many on right: excess discarded • Too many on left: excess set to undef • Length function: implicit $a = @fred # sets $a to length(@fred) • Compare with ($a) = @fred @a = ($a)
Array Element Access • Index origin is 0 • Example: @fred = (1..5) $fred[2] is 3 • Slice: a subarray chosen by an index list • Example: @fred = (1..5) @fred[2,3,4] is (3,4,5)
Array Element List (2) • More slices • @fred[0,1,2] = @fred[1,1,1] makes the first three elements of @fred equal to $fred[1] • @fred = (7,8,9) • @barney = (2,1,0) • @bf = @fred[@barney] so @bf is (9,8,7)
Array Element List (3) • $#fred is the index value of the last element of @fred • So, $fred[$#fred] is the value of the last element of @fred • And so is $fred[-1] since negative indices count backwards from the end, starting at -1.
Arrays as Stacks • push (@fred, “new”) is equivalent to @fred = (@fred, “new”) • $a = pop(@fred) removes the last value of @fred and assigns it to $a. Right is no better than left • unshift (@fred, “new”) is equivalent to @fred = (“new”, @fred)
Arrays as Stacks (2) • $a = shift(@fred) assigns the first element of @fred to $a and removes it from @fred
More Array Functions • reverse • sort • chomp