#!/usr/local/bin/perl -w # <STDIN> IN LIST CONTEXT # By Louis Ziantz # Description: This program is a demonstration of reading # from STDIN into an array. # Procedure: Several lines are read from input and # the array is output several ways. # Input: Lines of text from STDIN. # Output: Array read from STDIN in several ways. print("Type several lines followed by a <control>D ...\n"); @a = <STDIN>; # @a is ("<STDIN> in list context.\n", # "Each element of @a gets a line of input.\n", # "Like so.\n") print("Result of print(\@a); ... \n"); print(@a); print("Result of print(\"\@a\"); ... \n"); # an easier way to print the same message # print('Result of print("@a"); ...', "\n"); print("@a");
# Output: % array.stdin.plx Type several lines followed by a <control>D ... <STDIN> in list context. Each element of @a gets a line of input. Like so. Result of print(@a); ... <STDIN> in list context. Each element of @a gets a line of input. Like so. Result of print("@a"); ... <STDIN> in list context. Each element of @a gets a line of input. Like so. # notice that spaces are added when we # interploate the array
Comparison Operators Note : Return value assumes $l <op> $r is evaluated Comparison Numeric String Return value ---------- ------- ------ ------------ Equal == eq True if $l is equal to $r Not Equal != ne True if $l is not equal to $r Less than < lt True if $l is less than $r Greater than > gt True if $l is greater than $r Less than True if $l is not greater or equal <= le than $r Gr. than True if $l is not less or equal >= ge than $r Comparison <=> cmp 0 if equal, 1 if $l greater, -1 if $r greater Logical Operators Note : Result value assumes $l <op> $r is evaluated (or <op> $a for unary operator) Name High-prec Low-prec Result ---- --------- -------- ------ And && and $l if $l is false; $r otherwise Or || or $l if $l is true; $r otherwise Not ! not True if $a is not true Precedence Revisited Assoc Operator ----- -------- Right ** (2 ** 2 ** 3 # 2 ** (2 ** 3)) Right ! + - (unary) Left * / % x (multiplication) Left + - . (addition) Nonassoc Named unary ops (like chomp) Nonassoc < <= > >= lt le gt ge Nonassoc == != <=> eq ne cmp Left && Left || Nonassoc .. (range) Right = += -= (etc.) (assignment) Right not Left and Left or
#!/usr/local/bin/perl -w # NESTED IF IN PERL EXAMPLE # By Louis Ziantz # Description: This program is a demonstration a nested # if structure in Perl. # Procedure: A grade is read, and an appropriate # grade counter is incremented based on # the grade. # Input: A letter grade. # Output: None. $a_count = $b_count = 0; $c_count = $d_count = 0; $f_count = 0; $grade = <STDIN>; chomp($grade); if (($grade eq 'a') || ($grade eq 'A')) { $a_count++; } elsif (($grade eq 'b') || ($grade eq 'B')) { $b_count++; } elsif (($grade eq 'c') || ($grade eq 'C')) { $c_count++; } elsif (($grade eq 'd') || ($grade eq 'D')) { $d_count++; } elsif (($grade eq 'f') || ($grade eq 'F')) { $f_count++; } else { print("Invalid grade $grade entered\n."); }
Another way to specify the conditions...
$grade = <STDIN>; chomp($grade); if ("\U$grade" eq 'A') { $a_count++; } elsif ("\U$grade" eq 'B') { $b_count++; } elsif ("\U$grade" eq 'C') { $c_count++; } elsif ("\U$grade" eq 'D') { $d_count++; } elsif ("\U$grade" eq 'F') { $f_count++; } else { print("Invalid grade $grade entered\n."); }
#!/usr/local/bin/perl -w # VARIOUS HASH EXAMPLES IN PERL # By Louis Ziantz # Description: This program is a demonstration of assigning # to hash values, building hashes from lists, # reversing hashes, and iterating through hashes. # Procedure: Simple value assignments are first shown. # Assignment of a list to a hash is shown. # The reverse of a hash being treated as a list # is carried out. Two methods of iterating # through hashes are then illustrated. # Input: None. # Output: A hash is printed using two different methods # of iterating over it. $a{"aaa"} = "bbb"; # creates value "bbb" with key "aaa" $a{ccc} = "bBB"; # creates value "bBB" with key "ccc" $a{345.2} = 456.5; # creates value 456.5 with key "345.2" %building = ( "CS", "Bahamas", "CS", "Amos Eaton", "Math", "Amos Eaton", "ECSE", "CII", "Arch", "Greene" ); %building = ( CS => "Amos Eaton", Math => "Amos Eaton", ECSE => "CII", Arch => "Greene" ); @building = %building; # ("ECSE", "CII", "Math", "Amos Eaton", "Arch", "Greene", # "CS", "Amos Eaton") @dept = reverse(@building); # ("Amos Eaton", "CS", "Greene", "Arch", "Amos Eaton", # "Math", "CII", "ECSE") %dept = @dept; @dept = %dept; # ("CII", "ECSE", "Greene", "Arch", "Amos Eaton", "Math") foreach $key (keys (%building)) { # for each key of %building print("Key $key contains $building{$key}.\n"); } while (($key,$value) = each(%building)) { # as above print("Key $key contains $value.\n"); }