<?xml version="1.0" encoding="windows-1252"?>
<node id="125697" title="Re: Re: Looking for feed back on a guestbook" created="2001-11-15 21:01:44" updated="2005-07-19 14:08:11">
<type id="11">
note</type>
<author id="85412">
CharlesClarkson</author>
<data>
<field name="doctext">
&lt;CODE&gt;: #!/usr/bin/perl -w
: use strict;
: use CGI ':standard';
&lt;/CODE&gt;For some reason, &lt;CODE&gt;center&lt;/CODE&gt; is not included in &lt;CODE&gt;:standard&lt;/CODE&gt;. If we lead an item with *, we can use start_ and end_ (*html is included in &lt;CODE&gt;:standard&lt;/CODE&gt;.)&lt;CODE&gt;use CGI qw/:standard center *font *i *b/;

: use Regexp::Common qw(RE_profanity);
&lt;/CODE&gt;No need to load this unless we're using it. (Moved down page.)&lt;CODE&gt;: print header();
: print start_html();
:
: print "&lt;html&gt;&lt;head&gt;&lt;title&gt;Thanks for Signing!&lt;/title&gt;&lt;/head&gt;";
: print "&lt;body bgcolor=black text=white&gt;";
&lt;/CODE&gt;This can be combined into:&lt;CODE&gt;print
    header,
    start_html(
        -bgcolor    =&gt; 'black',
        -text       =&gt; 'white',
        -title      =&gt; 'Thanks for Signing!');

: my $q=new CGI;
: my $name =$q-&gt;param('name');
: my $mail =$q-&gt;param('mail');
: my $message =$q-&gt;param('message');
&lt;/CODE&gt;This uses CGI.pm as an object. We called CGI in the function oiented style. Most everyone agrees - &lt;b&gt;don't&lt;/b&gt; mix the two styles.&lt;CODE&gt;my $name    = param('name');
my $mail    = param('mail');
my $message = param('message');

: print "&lt;center&gt;&lt;p&gt;Thanks for signing my guestbook, your",
:       "message has been posted! $name!&lt;/center&gt;&lt;/p&gt;";
&lt;/CODE&gt;With &lt;CODE&gt;center&lt;/CODE&gt; defined:&lt;CODE&gt;print center(
        p(  'Thanks for signing my guestbook, your message ',
            "has been posted! $name!" ));

: # REMOVE THIS COMMENT TO ACTIVATE CENSOR
  # use Regexp::Common qw(RE_profanity);
: # $message =~ s/$RE{profanity}/bleep/msg;
:
: foreach ($name,$mail,$message) {
: s/&lt;/&amp;lt;/g;
: s/&gt;/&amp;gt;/g;
: };
:
: foreach ($message,$mail,$name){
: s/\(b\)/&lt;b&gt;/ig;
: s/\(i\)/&lt;i&gt;/ig;
: s/\(\/b\)/&lt;\/b&gt;/ig;
: s/\(\/i\)/&lt;\/i&gt;/ig;
: };
:
: foreach ($message,$mail,$name)
: {
: s/\(red\)/&lt;font color=red&gt;/ig;
: s/\(\/red\)/&lt;\/font&gt;/ig;
: };
&lt;/CODE&gt;These &lt;CODE&gt;foreach&lt;/CODE&gt; blocks can be combined. I used function calls for the HTML and variables for (red) and (/red) to improve readability (TIMTOWTDI).&lt;CODE&gt;my ($red, $sl_red) = qw|\(red\) \(/red\)|;
foreach ($name, $mail, $message) {
    s/&lt;/&amp;lt;/g;
    s/&gt;/&amp;gt;/g;

    s|\(b\)|start_b|ieg;
    s|\(i\)|start_i|ieg;
    s|\(/b\)|end_b|ieg;
    s|\(/i\)|end_i|ieg;

    s/$red/start_font({-color =&gt; 'red'})/iego;
    s/$sl_red/end_font/iego;
}

: if ($message =~ /\(red\)/i and $message =! /\(\/red\)/i) {
:   $message=$message."&lt;/font&gt;"
: };
&lt;/CODE&gt;This is useless since we have already replaced all occurrences of (red) and (/red). Perhaps we could count successful matches or place this &lt;CODE&gt;if&lt;/CODE&gt; block before the &lt;CODE&gt;foreach&lt;/CODE&gt; block.&lt;CODE&gt;: print    "Name: $name &lt;br&gt; Email: $mail &lt;br&gt; Message: $message";
&lt;/CODE&gt;Let's move this down and combine it with the ending.&lt;CODE&gt;: open HTML, "&gt;&gt;../gbook.html" or die $!;
: print HTML "&lt;i&gt;Name:&lt;/i&gt; $name &lt;br&gt; &lt;i&gt;E-Mail: &lt;/i&gt;$mail&lt;br&gt; ",
:            "&lt;i&gt;Message: &lt;/i&gt;$message &lt;p&gt;";
&lt;/CODE&gt;Or perhaps:&lt;CODE&gt;print HTML
    i('Name: '), $name, br,
    i('E-Mail: '), $mail, br,
    i('Message: '), p($message);

: close HTML;
: print "&lt;/BODY&gt;&lt;/HTML&gt;";
&lt;/CODE&gt;Let's add the &lt;CODE&gt;print&lt;/CODE&gt; from above and use it with CGI.pm.&lt;CODE&gt;print
    "Name: $name", br,
    "Email: $mail", br,
    "Message: $message",
    end_html;

__END__
&lt;/CODE&gt;
&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;
HTH,&lt;BR&gt;
Charles K. Clarkson&lt;BR&gt;

</field>
<field name="root_node">
125496</field>
<field name="parent_node">
125610</field>
</data>
</node>
