Skip to content

Commit 44330ac

Browse files
committed
Rest of the code for article 3
1 parent c7c8854 commit 44330ac

8 files changed

+268
-0
lines changed

article3-3.cgi

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#!/usr/bin/perl -T
2+
3+
use strict;
4+
use warnings;
5+
use CGI ':standard';
6+
7+
my $name;
8+
my $logged;
9+
10+
if (param('login')) {
11+
$logged = 1;
12+
$name = param('name');
13+
print header(-cookie => cookie(-name=>'name',
14+
-value=>$name,
15+
-expires=>'+1y'));
16+
} elsif (param('logout')) {
17+
$logged = 0;
18+
$name = 'Guest';
19+
print header(-cookie => cookie(-name=>'name',
20+
-value=>'',
21+
-expires=>'-1d'));
22+
} else {
23+
$logged = defined cookie('name');
24+
$name = cookie('name') || 'Guest';
25+
print header;
26+
}
27+
28+
print start_html(-title => 'Cookies');
29+
30+
print h1('Cookies');
31+
print p('This is a cookie test page');
32+
33+
$name =~ s/</&lt/g;
34+
$name = b($name);
35+
36+
print p("Hello $name");
37+
38+
print start_form;
39+
if ($logged) {
40+
print p(submit(-name=>'logout', -value=>'logout'));
41+
} else {
42+
print p('Enter your name: ', textfield(-name=>'name'),
43+
submit(-name=>'login', -value=>'Set name'));
44+
}
45+
print end_form;
46+
print end_html;

article3-3.psgi

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#!/usr/bin/plackup
2+
3+
use strict;
4+
use warnings;
5+
use Plack::Request;
6+
use Plack::Response;
7+
use HTML::Tiny;
8+
9+
my $app = sub {
10+
my $name;
11+
my $logged;
12+
13+
my $req = Plack::Request->new(shift);
14+
my $res = Plack::Response->new(200);
15+
16+
if ($req->parameters->{login}) {
17+
$logged = 1;
18+
$name = $req->parameters->{name};
19+
$res->cookies->{name} = {
20+
value => $name,
21+
expires => '+1y',
22+
};
23+
} elsif ($req->parameters->{logout}) {
24+
$logged = 0;
25+
$name = 'Guest';
26+
$res->cookies->{name} = {
27+
value => '',
28+
expires => '-1d',
29+
};
30+
} else {
31+
$logged = defined $req->cookies->{name};
32+
$name = $req->cookies->{name} || 'Guest';
33+
}
34+
35+
$name =~ s/</&lt/g;
36+
37+
my $h = HTML::Tiny->new;
38+
39+
my $form;
40+
if ($logged) {
41+
$form = $h->p(
42+
$h->input({ type => 'submit', name => 'logout', value => 'logout' }),
43+
);
44+
} else {
45+
$form = $h->p([
46+
$h->p('Enter your name: ' . $h->input({ name => 'name' })),
47+
$h->input({ type => 'submit', name => 'login', value => 'Set name' }),
48+
]);
49+
}
50+
51+
my $body = $h->html([
52+
$h->h1('Cookies'),
53+
$h->p('This is a cookie test page'),
54+
$h->p([ 'Hello ', $h->b($name) ]),
55+
$h->form($form),
56+
]);
57+
58+
$res->body($body);
59+
60+
return $res->finalize;
61+
};
62+

article3-4.cgi

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/usr/bin/perl -T
2+
3+
use strict;
4+
use warnings;
5+
use CGI ':standard';
6+
use Template;
7+
8+
my $name = param('name');
9+
my $age = param('age');
10+
my $gender = param('gender');
11+
my @hobbies = param('hobby');
12+
13+
my $list;
14+
15+
if (@hobbies) {
16+
$list = join ', ', @hobbies;
17+
} else {
18+
$list = 'None';
19+
}
20+
21+
my $t = Template->new;
22+
23+
print header;
24+
25+
$t->process('form.tt', { name => $name,
26+
age => $age,
27+
gender => $gender,
28+
hobbies => $list })
29+
|| die $t->error;

article3-4.psgi

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#!/usr/bin/plackup
2+
3+
use strict;
4+
use warnings;
5+
use Plack::Request;
6+
use Template;
7+
8+
my $app = sub {
9+
my $req = Plack::Request->new(shift);
10+
11+
my $name = $req->parameters->{name};
12+
my $age = $req->parameters->{age};
13+
my $gender = $req->parameters->{gender};
14+
my @hobbies = $req->parameters->get_all('hobby');
15+
16+
my $list;
17+
18+
if (@hobbies) {
19+
$list = join ', ', @hobbies;
20+
} else {
21+
$list = 'None';
22+
}
23+
24+
my $t = Template->new;
25+
26+
my $body;
27+
28+
$t->process('form.tt', {
29+
name => $name,
30+
age => $age,
31+
gender => $gender,
32+
hobbies => $list,
33+
}, \$body)
34+
|| die $t->error;
35+
36+
return [ 200, [ 'Content-type' => 'text/html' ], [ $body ] ];
37+
};
38+

article3-5.cgi

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/usr/bin/perl -T
2+
3+
use strict;
4+
use warnings;
5+
use CGI ':standard';
6+
use Template;
7+
8+
my $name = param('name');
9+
my $age = param('age');
10+
my $gender = param('gender');
11+
my @hobbies = param('hobby');
12+
13+
my $t = Template->new;
14+
15+
print header;
16+
17+
$t->process('form.tt', { name => $name,
18+
age => $age,
19+
gender => $gender,
20+
hobbies => \@hobbies })
21+
|| die $t->error;

article3-5.psgi

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#!/usr/bin/plackup
2+
3+
use strict;
4+
use warnings;
5+
use Plack::Request;
6+
use Template;
7+
8+
my $app = sub {
9+
my $req = Plack::Request->new(shift);
10+
11+
my $name = $req->parameters->{name};
12+
my $age = $req->parameters->{age};
13+
my $gender = $req->parameters->{gender};
14+
my @hobbies = $req->parameters->get_all('hobby');
15+
16+
warn join ' / ', @hobbies;
17+
18+
my $t = Template->new;
19+
20+
my $body;
21+
22+
$t->process('form2.tt', {
23+
name => $name,
24+
age => $age,
25+
gender => $gender,
26+
hobbies => \@hobbies,
27+
}, \$body)
28+
|| die $t->error;
29+
30+
return [ 200, [ 'Content-type' => 'text/html' ], [ $body ] ];
31+
};
32+

form.tt

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<html>
2+
<head>
3+
<title>[% name %]</title>
4+
</head>
5+
<body>
6+
<h1>Welcome [% name %]</h1>
7+
<p>Here are your details:</p>
8+
<table>
9+
<tr><td>Name:</td> <td>[% name %]</td></tr>
10+
<tr><td>Age:</td> <td>[% age %]</td></tr>
11+
<tr><td>Gender:</td> <td>[% gender %]</td></tr>
12+
<tr><td>Hobbies:</td> <td>[% hobbies %]</td></tr>
13+
</table>
14+
</body>
15+
</html>

form2.tt

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<html>
2+
<head>
3+
<title>[% name %]</title>
4+
</head>
5+
<body>
6+
<h1>Welcome [% name %]</h1>
7+
<p>Here are your details:</p>
8+
<table>
9+
<tr><td>Name:</td> <td>[% name %]</td></tr>
10+
<tr><td>Age:</td> <td>[% age %]</td></tr>
11+
<tr><td>Gender:</td> <td>[% gender %]</td></tr>
12+
<tr><td>Hobbies:</td> <td>
13+
[% IF hobbies.size %]
14+
<ul>
15+
[% FOREACH hobby = hobbies %]
16+
<li>[% hobby %]</li>
17+
[% END %]
18+
</ul>
19+
[% ELSE %]
20+
None
21+
[% END %]
22+
</td></tr>
23+
</table>
24+
</body>
25+
</html>

0 commit comments

Comments
 (0)