250 likes | 378 Views
Scalar Data Types and Basic I/O. Variables in Perl. You DO NOT have to declare variables in Perl. Unless you force it to force you to declare variables. Three basic types of variables: Scalar Array Hashes. Scalars. Scalar variables store “single values”.
E N D
Variables in Perl • You DO NOT have to declare variables in Perl. • Unless you force it to force you to declare variables. • Three basic types of variables: • Scalar • Array • Hashes
Scalars • Scalar variables store “single values”. • This “single value” can be any of the following types: • int, float, double, char, string, or references. • In Perl these various types fall into one of three categories: • numbers, strings, and references. • You don’t have to declare a variable’s type.
Scalars: Declaration • All scalar variables begin with a $. • $ is NOT part of the variable! • Next character is either a letter or ‘_’. • Remaining characters are a mix of letters, numbers, and ‘_’. • Correct: $x, $myvar123, $avg_height • Wrong: $2values, $avg-height, $good$day.
Scalars: Numbers • Unlike C/C++, all numeric data in Perl are stored as double precision floating points. • Ex: 37 3.7 .37 37. 3E7 3e7 3E-7 • Hex: 0x2aff, 0xAA3, 0XFFF • Octal: 077 0276 • Underscore: 3_212_567 → 3,212,567. • Again, you do not need to specify the type.
Numeric Operators ++ and – have the highest precedence.
Examples • 4 % 2 → 0 • 5 / 2 → 2.5 (5 and 2 are coerced from integers to reals). • $total++ * 3 • $a ** 2 • $b / $ c / 2 • Important. The order of evaluation of operands of operators is unspecified. This is left for the compiler to decide. • Ex: $x++ * $x--
Scalars: Strings • Unlike C/C++, strings in Perl are not terminated by ‘\0’. • They are not represented as an array of characters. • Individual characters cannot be accessed with [ ]. • There are two types of strings in Perl • Single quoted strings (‘). • Double quoted strings (“).
Single Quoted Strings • Strings delimited by (‘). They are not interpolated and cannot contain escape sequence characters. • Examples: • ‘hello’ • ‘Don\’t do it!’ • ‘can\’t, won\’t, wouldn\’t ever!’ • ‘apples are good\n’ ??
Single Quoted Strings • Another to say the same thing: • q^hello^ • q^apples are good\t^ • q^Don’t do it!^ • q^can’t, won’t, wouldn’t ever!^ • Can also use ( ), { }, [ ], < > for better readability: • Q(hello) • Q{can’t, won’t, wouldn’t ever!}
Double Quoted Strings. • Differs from single quoted strings in two ways: • Can include escape sequence characters – e.g. \n, \t, \r, etc. • Variables in the string are interpolated. • Examples: • “The man said, \”Quantity \t Price \t Total\” \n\n” • “Apples are good for $name.” → “Apples are good for bob.” • “Apples are good for \$name.” → “Apples are good for $name.” • “Today is ${day}day.” → “Today is Monday.” • Can also use qq • Ex: qq*”No way!”, said the girl.*
When q Meets qq • What happens when you put (‘) and (“) together? • If “ is embedded within ‘ • ‘The boy said, “Today is $day” ’ • If ‘ is embedded within “ • “The boy said, ‘Today is $day’ “
String Operators • String Catenation (.) Append two strings together. • “Happy” . “ Birthday” → “Happy Birthday.” • $str . “ Holidays” → “Happy Holidays.” • The operands are not effected by (.) • Repetition operator (x) • “Beat OU! ” x 3 → “Beat OU! Beat OU! Beat OU! ” • What about? • “Happy ” . “Birthday! ” x 2 → “Happy Birthday! Birthday! ”
String Functions • Perl provides several useful string manipulation functions. • chop and chomp • length, lc, uc • ord, hex, oct • index, rindex • substr, join
Chop and Chomp • Chop removes the last character in a string. • chop(“apples”) → “apple” • If $a, $b, and $c are “a”, “an”, and “ant”, then chop($a, $b, $c) → “” “a” “an” • Chomp removes the ending input record separator (e.g. newline) in a string. • If string does not end with an input record separator, then chomp does nothing to the string and returns 0.
length, lc, and uc • length returns the number of chars. • Ex: length(“apples”) → 6 • lc converts a string to all lower case. • Ex: lc(“ApPlEs”) → “apples” • uc converts a string to all upper case. • Ex: uc(“apples”) → “APPLES”
index and rindex • index searches for the starting position of a substring. • rindex same as index except search is done from right to left. • Examples: • index(“apples”, “pp”) returns 1 • rindex(“apples”, “pp”) returns 1 • index(“apples”, “p”) returns 1 • rindex(“apples”, “p”) returns 2 • index(“apples”, “q”) returns -1
substr • substr extracts a substring • The way to call it is: • substr(string, position, length) • Examples: • substr(“fruit juice”, 0, 3) returns “fru” • substr(“fruit juice”, 3, 5) returns “it ju” • substr(“fruit juice”, -3, 3) returns “ice”
join • Like (.) but appends several strings separated by a deliminator. • The way to call it is: • join Expression, List • Example: $month = “09”, $day = “01”, $year = “05” • join ‘/’, $month, $day, $year → “09/01/05”. • join ‘/’, $month, $day, 2005 → ??
Mixed Modes • What happens when strings and numbers interact? • The output depends on the context. • Examples: $str = “32abc” • 7 + $str • 7 . $str • What if $str = “abc32” • 7 + $str • 7 . $str → 39 → “732abc” → 7
Assignments • Simple assignment operators (=) • $x = 2; • $average = $sum / $total; • $x = $y = $b = 2; • $result = 17 * ($sum = $x + $y); • chomp($str = $str1. $str1); • Compound assignment operators (<op>=) • $sum += $new_value; • $str .= “ing”; • $result **= 4;
Basic I/O • <STDIN> reads input from a keyboard • $new_input = <STDIN> • print writes output to screen • print “Hello world!\n”; • print (“Was summer vacation fun?\n”); • print (“The sum is: $sum”, “\tThe average is: $average\”);
A Simple Example # circle # Input: The radius of a circle. # Output: The area and circumference of the circle. $pi = 3.14; print “Please enter the radius of the circle: ”; $radius = <STDIN>; $area = $pi * $radius * $radius; $circumference = $pi * 2 * $radius; print “A circle of radius $radius has an area of $area \n”, “ and a circumference of $circumference \n”;