My four preferences in Perl Web practices
-
Upload
andysh -
Category
Technology
-
view
1.896 -
download
0
description
Transcript of My four preferences in Perl Web practices
![Page 1: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/1.jpg)
My Four Preferences
![Page 2: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/2.jpg)
My Four Preferences
in my Perl Web practice
![Page 3: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/3.jpg)
![Page 4: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/4.jpg)
![Page 5: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/5.jpg)
Architecture and music
![Page 6: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/6.jpg)
![Page 7: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/7.jpg)
![Page 8: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/8.jpg)
![Page 9: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/9.jpg)
![Page 10: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/10.jpg)
![Page 11: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/11.jpg)
Danube
![Page 12: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/12.jpg)
![Page 13: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/13.jpg)
![Page 14: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/14.jpg)
My Four Preferences
in my Perl Web practice
![Page 15: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/15.jpg)
1. Parsing URLs with grammar
2. .ini configuration files
3. WWW::Page
4. XSLT
![Page 16: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/16.jpg)
0. Perl 5.10
![Page 17: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/17.jpg)
1. Parsing URLs with grammar
![Page 18: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/18.jpg)
URL is . . .
![Page 19: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/19.jpg)
URL is . . .
a string
![Page 20: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/20.jpg)
URL is . . .
a string,
a set of parts
![Page 21: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/21.jpg)
URL is . . .
a string,
a set of parts,
a container of parameters
![Page 22: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/22.jpg)
Blog URL scheme
![Page 23: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/23.jpg)
Blog URL scheme/
![Page 24: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/24.jpg)
Blog URL scheme//message‐uri/
![Page 25: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/25.jpg)
Blog URL scheme//message‐uri//tag/tag‐name/
![Page 26: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/26.jpg)
Blog URL scheme//message‐uri//tag/tag‐name//post/
![Page 27: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/27.jpg)
Blog URL scheme//message‐uri//tag/tag‐name//post//message‐uri/post/
![Page 28: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/28.jpg)
Blog URL scheme//message‐uri//tag/tag‐name//post//message‐uri/post//message‐uri/comments/
![Page 29: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/29.jpg)
How to parse?
![Page 30: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/30.jpg)
How to parse?RewriteRules in .htaccess
![Page 31: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/31.jpg)
How to parse?RewriteRules in .htaccess^$ /index.pl?page=home
![Page 32: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/32.jpg)
How to parse?RewriteRules in .htaccess^$ /index.pl?page=home
^post/?$ /post.pl
![Page 33: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/33.jpg)
How to parse?RewriteRules in .htaccess^$ /index.pl?page=home
^post/?$ /post.pl
^([^/]+)/? /index.pl?page=$1
![Page 34: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/34.jpg)
How to parse?RewriteRules in .htaccess^$ /index.pl?page=home
^post/?$ /post.pl
^([^/]+)/? /index.pl?page=$1
etc.
![Page 35: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/35.jpg)
How to parse?RewriteRules in .htaccess
Bad: involves programmingoutside Perl
![Page 36: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/36.jpg)
How to parse?Regular expressions
![Page 37: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/37.jpg)
How to parse?Regular expressionsgiven ($uri) {
when (/^\/$/) {...}
}
![Page 38: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/38.jpg)
How to parse?Regular expressionsgiven ($uri) {
when (/^\/$/) {...}
when (/^\/post\/?/) {...}
}
![Page 39: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/39.jpg)
How to parse?Regular expressionsgiven ($uri) {
when (/^\/$/) {...}
when (/^\/post\/?/) {...}
# (regexes as in .htaccess)
}
![Page 40: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/40.jpg)
How to parse?Regular expressions
Bad: rules are not obvious
![Page 41: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/41.jpg)
How to parse?split builtin
![Page 42: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/42.jpg)
How to parse?split builtin
@parts = split m{/}, $uri;
given (scalar @parts) {
when (1) {...}
when (2) {...}
}
![Page 43: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/43.jpg)
How to parse?split builtin
Bad: boring
![Page 44: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/44.jpg)
How to parse?Grammars
![Page 45: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/45.jpg)
How to parse?Grammars
Cool!
![Page 46: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/46.jpg)
How to parse?Grammars
Cool!Easy to maintain
![Page 47: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/47.jpg)
How to parse?Grammars
Cool!Easy to maintainBut might be slow
![Page 48: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/48.jpg)
How to parse?Grammars
Cool!Easy to maintainBut might be slow . . .up to 100 times over regexes.
![Page 49: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/49.jpg)
Gramars
Parse::RecDescent today
Perl 6 grammars tomorrow
![Page 50: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/50.jpg)
Gramars
Parse::RecDescent today
Perl 6 grammars after Christmas
![Page 51: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/51.jpg)
uri : post EOL
| view EOL
![Page 52: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/52.jpg)
uri : post EOL
| view EOL
post : post‐message
| post‐comment
![Page 53: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/53.jpg)
uri : post EOL
| view EOL
post : post‐message
| post‐comment
view : view‐message
| view‐tag
![Page 54: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/54.jpg)
uri : post EOL
| view EOL
post : post‐message
| post‐comment
view : view‐message
| view‐tag
view‐message : ‘/’ word ‘/’
![Page 55: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/55.jpg)
uri : post EOL
| view EOL
post : post‐message
| post‐comment
view : view‐message
| view‐tag
view‐message : ‘/’ word ‘/’
view‐tag : ‘/tag/’ word ‘/’
![Page 56: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/56.jpg)
uri : post EOL
| view EOL
post : post‐message
| post‐comment
view : view‐message
| view‐tag
view‐message : ‘/’ word ‘/’
view‐tag : ‘/tag/’ word ‘/’
word : /\w+/
![Page 57: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/57.jpg)
uri : post EOL
| view EOL
post : post‐message
| post‐comment
view : view‐message
| view‐tag
view‐message : ‘/’ word ‘/’
view‐tag : ‘/tag/’ word ‘/’
word : /\w+/
post‐message : ‘/post/’
![Page 58: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/58.jpg)
uri : post EOL
| view EOL
post : post‐message
| post‐comment
view : view‐message
| view‐tag
view‐message : ‘/’ word ‘/’
view‐tag : ‘/tag/’ word ‘/’
word : /\w+/
post‐message : ‘/post/’
post‐comment : view‐message ‘/post/’
![Page 59: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/59.jpg)
Actions in grammars
![Page 60: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/60.jpg)
uri : post EOL
| view EOL
![Page 61: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/61.jpg)
uri : post EOL {
$action = ‘post’;
}
| view EOL
![Page 62: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/62.jpg)
uri : post EOL {
$action = ‘post’;
}
| view EOL {
$action = ‘view’;
}
![Page 63: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/63.jpg)
view‐message : ‘/’ word ‘/’
view‐tag : ‘/tag/’ word ‘/’
![Page 64: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/64.jpg)
view‐message : ‘/’ word ‘/’ {
$msg_sid = $item{word};
}
view‐tag : ‘/tag/’ word ‘/’
![Page 65: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/65.jpg)
view‐message : ‘/’ word ‘/’ {
$msg_sid = $item{word};
}
view‐tag : ‘/tag/’ word ‘/’ {
$action = ‘view‐tag’;
$tag = $item{word};
}
![Page 66: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/66.jpg)
http://example.com/twincity/
$action = ‘view’;
$msg_sid = ‘twincity’;
![Page 67: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/67.jpg)
http://example.com/twincity/
$action = ‘view’;
$msg_sid = ‘twincity’;
http://example.com/tag/workshop/
$action = ‘view‐tag’;
$tag = ‘workshop’;
![Page 68: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/68.jpg)
my %uri = (
'/' => {
'type' => 'index',
},
'/alpha/' => {
'type' => 'section',
'sectionUri' => 'alpha',
'sectionPage' => 1,
},
'/beta‐2/34/14/' => {
'type' => 'message',
'sectionUri' => 'beta',
'sectionPage' => 2,
'threadID' => 34,
'threadPage' => 1,
'messageID' => 14,
},
'/‐/' => {
'type' => '404',
});
![Page 69: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/69.jpg)
for $uri (keys %uri) {
$parser‐>parse($uri);
cmp_deeply(
$parser‐>{data},
$uri{$uri},
$uri
);
}
![Page 70: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/70.jpg)
Grammars are
logical
![Page 71: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/71.jpg)
Grammars are
logical,
easy to extend
![Page 72: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/72.jpg)
Grammars are
logical,
easy to extend,
cacheable
![Page 73: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/73.jpg)
Grammars are
logical,
easy to extend,
cacheable,
easy to test
![Page 74: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/74.jpg)
2. .ini configuration files
![Page 75: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/75.jpg)
Application =
code + configuration
![Page 76: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/76.jpg)
Example: blog
number of messages per page
![Page 77: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/77.jpg)
#!/usr/bin/perl
my $MSG_PER_PAGE = 10;
![Page 78: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/78.jpg)
#!/usr/bin/perl
my $MSG_PER_PAGE = 10;
![Page 79: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/79.jpg)
Load configuration from external file
![Page 80: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/80.jpg)
Load configuration from external non-Perl file
![Page 81: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/81.jpg)
<config>
<page_length>10</page_length>
</config>
![Page 82: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/82.jpg)
Question: XML
or JSON
or YAML
?
![Page 83: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/83.jpg)
Answer: Windows INI
![Page 84: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/84.jpg)
[page]
length=10
![Page 85: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/85.jpg)
[section]
page_length=10
[thread]
page_length=10
[obsene]
replacement=***
[preview]
last_posts=31
last_message_length=200
![Page 86: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/86.jpg)
global.ini local.ini
![Page 87: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/87.jpg)
global.ini local.ini
[page]
length=10
[db]
host=db.int
port=3333
[db]
host=localhost
port=3306
![Page 88: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/88.jpg)
use Config::INI::Access;
config‐>load("conf/config.ini");
![Page 89: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/89.jpg)
use Config::INI::Access;
config‐>load("conf/config.ini");
config‐>load("conf/local.ini");
![Page 90: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/90.jpg)
use Config::INI::Access;
config‐>load("conf/config.ini");
config‐>load("conf/local.ini");
say config‐>db‐>host;
![Page 91: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/91.jpg)
[db]
host=localhost
port=3306
say config‐>db‐>host;
![Page 92: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/92.jpg)
3. WWW::Page
![Page 93: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/93.jpg)
WWW::Page
is a kinda MVC
![Page 95: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/95.jpg)
http://example.com/some/page
/www/example.com/some/page/index.xml
![Page 96: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/96.jpg)
http://example.com/some/page
/www/example.com/some/page/index.xml
XML
![Page 97: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/97.jpg)
http://example.com/some/page
/www/example.com/some/page/index.xml
XML
XML
Perl
![Page 98: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/98.jpg)
http://example.com/some/page
/www/example.com/some/page/index.xml
XML
XML
Perl
HTML
XSLT
![Page 99: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/99.jpg)
http://example.com/some/page
/www/example.com/some/page/index.xml
XML
XML
Perl
HTML
XSLT
Browser
![Page 100: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/100.jpg)
<?xml version="1.0" encoding="UTF‐8"?>
<page
import="Import::Client"
transform="view.xsl"
xmlns:page="urn:www‐page">
<manifest>
<title>WWW::Page Web‐Site</title>
<locale>en‐gb</locale>
<page:keyword‐list/>
</manifest>
<content>
<page:month‐calendar/>
</content>
</page>
![Page 101: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/101.jpg)
use WWW::Page;
use encoding 'utf‐8';
my $page = new WWW::Page ({
'xslt‐root' => "../data/xsl",
});
print $page‐>as_string();
![Page 102: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/102.jpg)
<?xml version="1.0" encoding="UTF‐8"?>
<page
import="Import::Client"
transform="view.xsl"
xmlns:page="urn:www‐page">
<manifest>
<title>WWW::Page Web‐Site</title>
<locale>en‐gb</locale>
<page:keyword‐list/>
</manifest>
<content>
<page:month‐calendar/>
</content>
</page>
![Page 103: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/103.jpg)
<?xml version="1.0" encoding="UTF‐8"?>
<page
import="Import::Client"
transform="view.xsl"
xmlns:page="urn:www‐page">
<manifest>
<title>WWW::Page Web‐Site</title>
<locale>en‐gb</locale>
<page:keyword‐list/>
</manifest>
<content>
<page:month‐calendar/>
</content>
</page>
![Page 104: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/104.jpg)
<?xml version="1.0" encoding="UTF‐8"?>
<page
sub Import::Client::keywordList
transform="view.xsl"
xmlns:page="urn:www‐page">
<manifest>
<title>WWW::Page Web‐Site</title>
<locale>en‐gb</locale>
<page:keyword‐list/>
</manifest>
<content>
<page:month‐calendar/>
</content>
</page>
![Page 105: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/105.jpg)
package Import::Client;
sub keywordList { my ($this, $page, $node, $args) = @_; my $sth = $dbh‐>prepare( "select keyword, uri from keywords"); $sth‐>execute(); while (my ($keyword, $uri) = $sth‐>fetchrow_array()) { my $item = $page‐>{'xml'}‐>createElement ('item'); $item‐>appendText($keyword); $item‐>setAttribute('uri', $uri); $node‐>appendChild($item); } return $node; }
![Page 106: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/106.jpg)
package Import::Client;
sub keywordList { my ($this, $page, $node, $args) = @_; my $sth = $dbh‐>prepare( "select keyword, uri from keywords"); $sth‐>execute(); while (my ($keyword, $uri) = $sth‐>fetchrow_array()) { my $item = $page‐>{'xml'}‐>createElement ('item'); $item‐>appendText($keyword); $item‐>setAttribute('uri', $uri); $node‐>appendChild($item); } return $node; }
![Page 107: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/107.jpg)
package Import::Client;
sub keywordList { my ($this, $page, $node, $args) = @_; my $sth = $dbh‐>prepare( "select keyword, uri from keywords"); $sth‐>execute(); while (my ($keyword, $uri) = $sth‐>fetchrow_array()) { my $item = $page‐>{'xml'}‐>createElement ('item'); $item‐>appendText($keyword); $item‐>setAttribute('uri', $uri); $node‐>appendChild($item); } return $node; }
![Page 108: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/108.jpg)
package Import::Client;
sub keywordList { my ($this, $page, $node, $args) = @_; my $sth = $dbh‐>prepare( "select keyword, uri from keywords"); $sth‐>execute(); while (my ($keyword, $uri) = $sth‐>fetchrow_array()) { my $item = $page‐>{'xml'}‐>createElement ('item'); $item‐>appendText($keyword); $item‐>setAttribute('uri', $uri); $node‐>appendChild($item); } return $node; }
![Page 109: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/109.jpg)
<?xml version="1.0" encoding="UTF‐8"?>
<page
import="Import::Client"
transform="view.xsl"
xmlns:page="urn:www‐page">
<manifest>
<title>WWW::Page Web‐Site</title>
<locale>en‐gb</locale>
<page:keyword‐list/>
</manifest>
<content>
<page:month‐calendar/>
</content>
</page>
![Page 110: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/110.jpg)
<?xml version="1.0" encoding="UTF‐8"?>
<page
import="Import::Client"
transform="view.xsl"
xmlns:page="urn:www‐page">
<manifest>
<title>WWW::Page Web‐Site</title>
<locale>en‐gb</locale>
<page:keyword‐list/>
</manifest>
<content>
<page:month‐calendar/>
</content>
</page>
![Page 111: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/111.jpg)
<keyword‐list>
<item uri="http://perl.org/">Perl</item>
<item uri="http://dev.perl.org/">Perl 6</item>
<item uri="http://bbc.co.uk/">Perl on rails</item>
</keyword‐list>
![Page 112: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/112.jpg)
<?xml version="1.0" encoding="UTF‐8"?>
<page
import="Import::Client"
transform="view.xsl"
xmlns:page="urn:www‐page">
<manifest>
<title>WWW::Page Web‐Site</title>
<locale>en‐gb</locale>
<keyword‐list> . . . </keyword‐list>
</manifest>
<content>
<month‐calendar> . . . </month‐calendar>
</content>
</page>
![Page 113: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/113.jpg)
XML
HTML
XSLT
Browser
![Page 114: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/114.jpg)
Possible improvements
![Page 115: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/115.jpg)
<?xml version="1.0" encoding="UTF‐8"?>
<page
import="Import::Client"
transform="view.xsl"
xmlns:page="urn:www‐page">
<manifest>
<page:keyword‐list remote="host2">
</manifest>
<content>
<page:month‐calendar/>
</content>
</page>
![Page 116: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/116.jpg)
<?xml version="1.0" encoding="UTF‐8"?>
<page
import="Import::Client"
transform="view.xsl"
xmlns:page="urn:www‐page">
<manifest>
<page:keyword‐list remote="host2">
</manifest>
<content>
<page:month‐calendar cache="memcached"/>
</content>
</page>
![Page 117: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/117.jpg)
<?xml version="1.0" encoding="UTF‐8"?>
<page
import="Import::Client"
transform="view.xsl"
xmlns:page="urn:www‐page">
<manifest>
<page:keyword‐list remote="host2">
</manifest>
<content>
<page:month‐calendar cache="xml"/>
</content>
</page>
![Page 118: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/118.jpg)
<?xml version="1.0" encoding="UTF‐8"?>
<page
import="Import::Client"
transform="view.xsl"
xmlns:page="urn:www‐page">
<manifest>
<page:keyword‐list remote="host2">
</manifest>
<content>
<page:month‐calendar transform="other.xsl"/>
</content>
</page>
![Page 119: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/119.jpg)
4. XSLT
![Page 120: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/120.jpg)
Not .WHAT XSLT is
but .WHY I use it
![Page 121: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/121.jpg)
4a. XSLT: divide and power
![Page 122: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/122.jpg)
website = logic + layout
![Page 123: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/123.jpg)
website = Perl-code + HTML
![Page 124: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/124.jpg)
website = Perl-code + XML+XSLT
![Page 125: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/125.jpg)
website = Perl-code + XML+XSLT
Perl programmer XSLT coder
![Page 126: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/126.jpg)
XML+XSLT
Perl programmer XSLT coder
website = Perl-code +
![Page 127: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/127.jpg)
4b. XSLT: multiple languages
![Page 128: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/128.jpg)
en.xml
<strings>
<months>
<item>January</item>
<item>February</item>
. . .
<item>December</item>
</months>
</strings>
![Page 129: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/129.jpg)
de.xml
<strings>
<months>
<item>Januar</item>
<item>Februar</item>
. . .
<item>Dezember</item>
</months>
</strings>
![Page 130: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/130.jpg)
at.xml
<strings>
<months>
<item>Jänner</item>
<item>Februar</item>
. . .
<item>Dezember</item>
</months>
</strings>
![Page 131: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/131.jpg)
<xsl:variable name="str">
<xsl:copy‐of select="
document(
concat($lang, ‘.xml’)
)"/>
</xsl:variable>
![Page 132: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/132.jpg)
<xsl:variable name="str">
<xsl:copy‐of select="
document(
concat($lang, ‘.xml’)
)/strings"/>
</xsl:variable>
![Page 133: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/133.jpg)
<date day="7" month="11" year="2008"/>
![Page 134: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/134.jpg)
<date day="7" month="11" year="2008"/>
<xsl:value‐of select="@day"/>
![Page 135: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/135.jpg)
<date day="7" month="11" year="2008"/>
<xsl:value‐of select="@year"/>
![Page 136: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/136.jpg)
<date day="7" month="11" year="2008"/>
<xsl:value‐of
select="$str/months/item[@month]"/>
![Page 137: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/137.jpg)
4b. XSLT: multiple layouts
![Page 138: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/138.jpg)
<?xml version="1.0" encoding="UTF‐8"?>
<page
import="Import::Client"
transform="view.xsl"
xmlns:page="urn:www‐page">
<manifest>
<title>WWW::Page Web‐Site</title>
<locale>en‐gb</locale>
<page:keyword‐list/>
</manifest>
<content>
<page:month‐calendar/>
</content>
</page>
![Page 139: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/139.jpg)
<?xml version="1.0" encoding="UTF‐8"?>
<page
import="Import::Client"
transform="pda/view.xsl"
xmlns:page="urn:www‐page">
<manifest>
<title>WWW::Page Web‐Site</title>
<locale>en‐gb</locale>
<page:keyword‐list/>
</manifest>
<content>
<page:month‐calendar/>
</content>
</page>
![Page 140: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/140.jpg)
<?xml version="1.0" encoding="UTF‐8"?>
<page
import="Import::Client"
transform="iphone/view.xsl"
xmlns:page="urn:www‐page">
<manifest>
<title>WWW::Page Web‐Site</title>
<locale>en‐gb</locale>
<page:keyword‐list/>
</manifest>
<content>
<page:month‐calendar/>
</content>
</page>
![Page 141: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/141.jpg)
<?xml version="1.0" encoding="UTF‐8"?>
<page
import="Import::Client"
transform="rss/view.xsl"
xmlns:page="urn:www‐page">
<manifest>
<title>WWW::Page Web‐Site</title>
<locale>en‐gb</locale>
<page:keyword‐list/>
</manifest>
<content>
<page:month‐calendar/>
</content>
</page>
![Page 142: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/142.jpg)
XML+XSLT
Perl programmer XSLT coder
website = Perl-code +
![Page 143: My four preferences in Perl Web practices](https://reader033.fdocuments.in/reader033/viewer/2022051609/546ce9a4b4af9f702c8b520f/html5/thumbnails/143.jpg)
XML+XSLT
Perl programmer XSLT coder
website = Perl-code +
XSLT coder
XSLT coder
XSLT coder