O'Reilly logo

Perl for Web Site Management by John Callender

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

The Cyberfair::Page Module

Now that we know how to create our own module, let’s take a look at Example 16-3. I created this module to allow me to take some of the subroutines out of the make_cf.plx script created for the Main School CyberFair project, and then share those subroutines across multiple scripts.

Example 16-3. A Perl module to allow easy re-use of the CyberFair project’s subroutines

package Cyberfair::Page; use strict; BEGIN { use Exporter ( ); use vars qw(@ISA @EXPORT @EXPORT_OK); $VERSION = '0.01'; @ISA = qw(Exporter); @EXPORT = qw( ); @EXPORT_OK = qw(read_page build_page write_page); } sub read_page { # invoked with a full pathname as argument, # returns a hash suitable for # feeding to &build_page my $pathname = shift; my %return_hash; open IN, "$pathname" or die "Couldn't open $pathname for reading: $!"; my $page = join '', <IN>; close IN; return unless $page; if ($page =~ m#<TITLE>(.*)</TITLE>#i) { $return_hash{title} = $1; } while ($page =~ m#<META\s+NAME="([^"]+)"\s+CONTENT="([^"]*)">#gi) { $return_hash{$1} = $2; } if ($page =~ /.+<!--begin content-->\s*(.+?)\s*<!--end content-->/s) { $return_hash{content} = $1; } return %return_hash; } sub build_page { # given a suitable parameter hash, build a CyberFair page # and return it my %param = ( type => 'cf', # these are title => 'Untitled Document', # defaults... description => '', keywords => '', content => '', @_, # supplied name-value pairs come in here ); # translate the various META params into a merged $meta_block ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required