Commit | Line | Data |
---|---|---|
920dae64 AT |
1 | #!/usr/local/bin/perl |
2 | ||
3 | use CGI qw(:standard); | |
4 | ||
5 | @ANIMALS=sort qw/lion tiger bear pig porcupine ferret zebra gnu ostrich | |
6 | emu moa goat weasel yak chicken sheep hyena dodo lounge-lizard | |
7 | squirrel rat mouse hedgehog racoon baboon kangaroo hippopotamus | |
8 | giraffe/; | |
9 | ||
10 | # Recover the previous animals from the magic cookie. | |
11 | # The cookie has been formatted as an associative array | |
12 | # mapping animal name to the number of animals. | |
13 | %zoo = cookie('animals'); | |
14 | ||
15 | # Recover the new animal(s) from the parameter 'new_animal' | |
16 | @new = param('new_animals'); | |
17 | ||
18 | # If the action is 'add', then add new animals to the zoo. Otherwise | |
19 | # delete them. | |
20 | foreach (@new) { | |
21 | if (param('action') eq 'Add') { | |
22 | $zoo{$_}++; | |
23 | } elsif (param('action') eq 'Delete') { | |
24 | $zoo{$_}-- if $zoo{$_}; | |
25 | delete $zoo{$_} unless $zoo{$_}; | |
26 | } | |
27 | } | |
28 | ||
29 | # Add new animals to old, and put them in a cookie | |
30 | $the_cookie = cookie(-name=>'animals', | |
31 | -value=>\%zoo, | |
32 | -expires=>'+1h'); | |
33 | ||
34 | # Print the header, incorporating the cookie and the expiration date... | |
35 | print header(-cookie=>$the_cookie); | |
36 | ||
37 | # Now we're ready to create our HTML page. | |
38 | print start_html('Animal crackers'); | |
39 | ||
40 | print <<EOF; | |
41 | <h1>Animal Crackers</h1> | |
42 | Choose the animals you want to add to the zoo, and click "add". | |
43 | Come back to this page any time within the next hour and the list of | |
44 | animals in the zoo will be resurrected. You can even quit Netscape | |
45 | completely! | |
46 | <p> | |
47 | Try adding the same animal several times to the list. Does this | |
48 | remind you vaguely of a shopping cart? | |
49 | <p> | |
50 | <em>This script only works with Netscape browsers</em> | |
51 | <p> | |
52 | <center> | |
53 | <table border> | |
54 | <tr><th>Add/Delete<th>Current Contents | |
55 | EOF | |
56 | ; | |
57 | ||
58 | print "<tr><td>",start_form; | |
59 | print scrolling_list(-name=>'new_animals', | |
60 | -values=>[@ANIMALS], | |
61 | -multiple=>1, | |
62 | -override=>1, | |
63 | -size=>10),"<br>"; | |
64 | print submit(-name=>'action',-value=>'Delete'), | |
65 | submit(-name=>'action',-value=>'Add'); | |
66 | print end_form; | |
67 | ||
68 | print "<td>"; | |
69 | if (%zoo) { # make a table | |
70 | print "<ul>\n"; | |
71 | foreach (sort keys %zoo) { | |
72 | print "<li>$zoo{$_} $_\n"; | |
73 | } | |
74 | print "</ul>\n"; | |
75 | } else { | |
76 | print "<strong>The zoo is empty.</strong>\n"; | |
77 | } | |
78 | print "</table></center>"; | |
79 | ||
80 | print <<EOF; | |
81 | <hr> | |
82 | <ADDRESS>Lincoln D. Stein</ADDRESS><BR> | |
83 | <A HREF="./">More Examples</A> | |
84 | EOF | |
85 | ; | |
86 | print end_html; | |
87 | ||
88 |