In the early days of the of the web, (server-side) dynamic web pages
meant CGI scripts. However, CGI scripts were lousy to read because of
a lot of
print statements with a lot of escaping, over
long lines and nearly no chance to guess the final output at one
These problems were mostly solved by the so called templating systems.
Popular templating systems are PHP, JSP and ASP.
In Perl there are multiple templating systems, each
which it's own advantages and disadvantages. One of the most powerfull
and widely used systems is Embperl.
These templating systems embed the program code into the markup and
not vice versa as CGI scripts did. This usually made the code more
readable and the final output easier to guess.
The possibility to
include other files made complex web pages manageable, because you
can have common portions of the site in just one file and
include them in many others. So you could change the layout of the
headers, footers or menus each in just
one file and the design changed on all pages.
But imagine, you once want to the menu component - which always was on
the left side - on the right side. You would have to change all files
and move the statement which generates or includes the menu from in
front of the content to behind the content. If your site is large,
this can be a lot of (dumb) work.
Another disadvantage of this method is, that if you want one branch of
your site to have a slightly different layout - let's say it differs in
one of the included files - you'll have to change this information in
each of the affected files at top level. In object-oriented
programming, you would derive a new class from an existing one,
overriding just one or a few methods and all other methods will be
inherited from it's parent class(es).
So why not carryover the concept of object-oriented programming to
creating dynamic websites? Embperl does that by providing
Embperl::Object and thereby facilating the conception and
implementation of big dynamic component-based websites.
Using Embperl's own website (http://perl.apache.org/embperl/)
as example, the following sections will show how
Embperl::Object works. The full source code of the Embperl
website is included in the distribution of version 2.0 of Embperl in