[7824] in Perl-Users-Digest

home help back first fref pref prev next nref lref last post

Perl-Users Digest, Issue: 1449 Volume: 8

daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Wed Dec 10 16:17:24 1997

Date: Wed, 10 Dec 97 13:00:22 -0800
From: Perl-Users Digest <Perl-Users-Request@ruby.OCE.ORST.EDU>
To: Perl-Users@ruby.OCE.ORST.EDU (Perl-Users Digest)

Perl-Users Digest           Wed, 10 Dec 1997     Volume: 8 Number: 1449

Today's topics:
     Re: ? Determining the directory of an executing script  <rootbeer@teleport.com>
     Re: a certain bug...!!! <minner@chirondiag.com>
     Bug with my script <dikdist@microtec.net>
     Cache'ing getpwnam()? <minner@chirondiag.com>
     Checking the instance of a class <achoy@us.oracle.com>
     Re: Dynamic array names <rootbeer@teleport.com>
     Re: getting owner of file in NT?? <carse@ibm.net>
     Kanji Perl (was: Re: open and whitespace) <rootbeer@teleport.com>
     Re: libperl.so (Neil Briscoe)
     Re: Local Array initialized to a constant <rootbeer@teleport.com>
     Re: malloc <rootbeer@teleport.com>
     Memory & Page Size <mikeg@NOSPAMPLEASE.slpma8.ed.ray.com>
     Re: PERL CGI Parsing <brad.bradley@bridge.bellsouth.com>
     Re: Perl for Win 32 - please help! <jan@chipnet.cz>
     Re: perl module for accessing an ms-access db file on a <rootbeer@teleport.com>
     Re: print buffer flush <rootbeer@teleport.com>
     Re: Returning information from an nslookup ?? <rootbeer@teleport.com>
     Re: There's More Than One Way? scott@softbase.com
     Re: There's More Than One Way? (Gene Johannsen)
     Re: use lib "$local_lodules_path" <rootbeer@teleport.com>
     Digest Administrivia (Last modified: 8 Mar 97) (Perl-Users-Digest Admin)

----------------------------------------------------------------------

Date: Wed, 10 Dec 1997 12:34:47 -0800
From: Tom Phoenix <rootbeer@teleport.com>
To: jeff stanier <stanier@neuma.com>
Subject: Re: ? Determining the directory of an executing script ?
Message-Id: <Pine.GSO.3.96.971210123307.15679N-100000@user2.teleport.com>

On Wed, 10 Dec 1997, jeff stanier wrote:

> I am calling a perl script (addvars.pl)  from another application.  The
> script "requires " another file containing sub-routines (commonsub.pl).
> addvars.pl and commonsub.pl are in the same directory.   Since I am calling
> the addvars.pl from  another directory "." does not equal the location of
> the addvars.pl or commonsub.pl.  Can I determine the location of the
> addvars.pl script as it is executing and unshift or push it into @INC.

If you're trying to find your current directory, use the CWD.pm module.
Hope this helps!

-- 
Tom Phoenix           http://www.teleport.com/~rootbeer/
rootbeer@teleport.com  PGP   Skribu al mi per Esperanto!
Randal Schwartz Case:  http://www.rahul.net/jeffrey/ovs/
              Ask me about Perl trainings!



------------------------------

Date: Wed, 10 Dec 1997 15:25:19 -0500
From: Aaron Minner <minner@chirondiag.com>
To: Christian Khoury <Christian.Khoury@inria.fr>
Subject: Re: a certain bug...!!!
Message-Id: <348EFAAF.5DF5@chirondiag.com>

I don't know if it's a bug, but I too noticed this
behavior just the other day.  The "+<" works, and I
was on a tight schedule, so I didn't bother to do
anything with it.  But I'm curious about it, too.

Any definitive answer for this?

Aaron

Christian Khoury wrote:
> 
> i read in "Programming Perl" (2nd edition) that i just need to add a
> "+>" to a file's name to be able to open it in read write mode...i tried
> it and it failed....but with "+<", it worked fine...
> 
> is this a known bug?


------------------------------

Date: 10 Dec 1997 20:48:05 GMT
From: "DIK Distributions" <dikdist@microtec.net>
Subject: Bug with my script
Message-Id: <01bd05ac$bd4e9700$e605bace@pierrette>

When I call my perl script, I got that message :

CGIwrap Error: System Error: execv() failed

Error: No such file or directory (2)

I want to send my form to my e-mail. I call my script like that :
<FORM
ACTION="http://www.jouetsexpress.com/cgi-bin/cgiwrap/dikdist/FormMail.pl"
METHOD=POST>
<input type=hidden name="recipient" value="dikdist@microtec.net">

If someone can help me, please write me
Andri Marquis
dikdist@microtec.net

Thanks for all

My script is a script that I found on www. There it is:

#!/usr/bin/perl
############################################################################
##
# FormMail                        Version 1.6                              
 #
# Copyright 1995-1997 Matt Wright mattw@worldwidemart.com                  
 #
# Created 06/09/95                Last Modified 05/02/97                   
 #
# Matt's Script Archive, Inc.:    http://www.worldwidemart.com/scripts/    
 #
############################################################################
##
# COPYRIGHT NOTICE                                                         
 #
# Copyright 1995-1997 Matthew M. Wright  All Rights Reserved.              
 #
#                                                                          
 #
# FormMail may be used and modified free of charge by anyone so long as
this #
# copyright notice and the comments above remain intact.  By using this    
 #
# code you agree to indemnify Matthew M. Wright from any liability that    
 #
# might arise from its use.                                                
 #
#                                                                          
 #
# Selling the code for this program without prior written consent is       
 #
# expressly forbidden.  In other words, please ask first before you try and
 #
# make money off of my program.                                            
 #
#                                                                          
 #
# Obtain permission before redistributing this software over the Internet
or #
# in any other medium.	In all cases copyright and header must remain intact
#
############################################################################
##
# Define Variables                                                         
 #
#	 Detailed Information Found In README File.                            #

# $mailprog defines the location of your sendmail program on your unix     
 #
# system.                                                                  
 #

$mailprog = '/usr/sbin/sendmail';

# @referers allows forms to be located only on servers which are defined   
 #
# in this field.  This security fix from the last version which allowed    
 #
# anyone on any server to use your FormMail script on their web site.      
 #

# @referers = ('jouetsexpress.com','204.50.80.200');

# Done                                                                     
 #
############################################################################
##

# Check Referring URL
&check_url;

# Retrieve Date
&get_date;

# Parse Form Contents
&parse_form;

# Check Required Fields
&check_required;

# Return HTML Page or Redirect User
&return_html;

# Send E-Mail
&send_mail;

sub check_url {

    # Localize the check_referer flag which determines if user is valid.   
 #
    local($check_referer) = 0;

    # If a referring URL was specified, for each valid referer, make sure  
 #
    # that a valid referring URL was passed to FormMail.                   
 #

    if ($ENV{'HTTP_REFERER'}) {
        foreach $referer (@referers) {
            if ($ENV{'HTTP_REFERER'} =~ m|https?://([^/]*)$referer|i) {
                $check_referer = 1;
                last;
            }
        }
    }
    else {
        $check_referer = 1;
    }

    # If the HTTP_REFERER was invalid, send back an error.                 
 #
    if ($check_referer != 1) { &error('bad_referer') }
}

sub get_date {

    # Define arrays for the day of the week and month of the year.         
 #
    @days   = ('Sunday','Monday','Tuesday','Wednesday',
               'Thursday','Friday','Saturday');
    @months = ('January','February','March','April','May','June','July',
	         'August','September','October','November','December');

    # Get the current time and format the hour, minutes and seconds.  Add  
 #
    # 1900 to the year to get the full 4 digit year.                       
 #
    ($sec,$min,$hour,$mday,$mon,$year,$wday) =
(localtime(time))[0,1,2,3,4,5,6];
    $time = sprintf("%02d:%02d:%02d",$hour,$min,$sec);
    $year += 1900;

    # Format the date.                                                     
 #
    $date = "$days[$wday], $months[$mon] $mday, $year at $time";

}

sub parse_form {

    # Define the configuration associative array.                          
 #
    %Config = ('recipient','',          'subject','',
               'email','',              'realname','',
               'redirect','',           'bgcolor','',
               'background','',         'link_color','',
               'vlink_color','',        'text_color','',
               'alink_color','',        'title','',
               'sort','',               'print_config','',
               'required','',           'env_report','',
               'return_link_title','',  'return_link_url','',
               'print_blank_fields','', 'missing_fields_redirect','');

    # Determine the form's REQUEST_METHOD (GET or POST) and split the form 
 #
    # fields up into their name-value pairs.  If the REQUEST_METHOD was    
 #
    # not GET or POST, send an error.                                      
 #
    if ($ENV{'REQUEST_METHOD'} eq 'GET') {
        # Split the name-value pairs
        @pairs = split(/&/, $ENV{'QUERY_STRING'});
    }
    elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {
        # Get the input
        read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
 
        # Split the name-value pairs
        @pairs = split(/&/, $buffer);
    }
    else {
        &error('request_method');
    }

    # For each name-value pair:                                            
 #
    foreach $pair (@pairs) {

        # Split the pair up into individual variables.                     
 #
        local($name, $value) = split(/=/, $pair);
 
        # Decode the form encoding on the name and value variables.        
 #
        $name =~ tr/+/ /;
        $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

        $value =~ tr/+/ /;
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

        # If they try to include server side includes, erase them, so they
        # aren't a security risk if the html gets returned.  Another 
        # security hole plugged up.
        $value =~ s/<!--(.|\n)*-->//g;

        # If the field name has been specified in the %Config array, it
will #
        # return a 1 for defined($Config{$name}}) and we should associate  
 #
        # this value with the appropriate configuration variable.  If this 
 #
        # is not a configuration form field, put it into the associative   
 #
        # array %Form, appending the value with a ', ' if there is already
a #
        # value present.  We also save the order of the form fields in the 
 #
        # @Field_Order array so we can use this order for the generic sort.
 #
        if (defined($Config{$name})) {
            $Config{$name} = $value;
        }
        else {
            if ($Form{$name} && $value) {
                $Form{$name} = "$Form{$name}, $value";
            }
            elsif ($value) {
                push(@Field_Order,$name);
                $Form{$name} = $value;
            }
        }
    }

    # The next six lines remove any extra spaces or new lines from the     
 #
    # configuration variables, which may have been caused if your editor   
 #
    # wraps lines after a certain length or if you used spaces between
field #
    # names or environment variables.                                      
 #
    $Config{'required'} =~ s/(\s+|\n)?,(\s+|\n)?/,/g;
    $Config{'required'} =~ s/(\s+)?\n+(\s+)?//g;
    $Config{'env_report'} =~ s/(\s+|\n)?,(\s+|\n)?/,/g;
    $Config{'env_report'} =~ s/(\s+)?\n+(\s+)?//g;
    $Config{'print_config'} =~ s/(\s+|\n)?,(\s+|\n)?/,/g;
    $Config{'print_config'} =~ s/(\s+)?\n+(\s+)?//g;

    # Split the configuration variables into individual field names.       
 #
    @Required = split(/,/,$Config{'required'});
    @Env_Report = split(/,/,$Config{'env_report'});
    @Print_Config = split(/,/,$Config{'print_config'});
}

sub check_required {

    # Localize the variables used in this subroutine.                      
 #
    local($require, @error);

    if (!$Config{'recipient'}) {
        if (!defined(%Form)) { &error('bad_referer') }
        else                 { &error('no_recipient') }
    }

    # For each require field defined in the form:                          
 #
    foreach $require (@Required) {

        # If the required field is the email field, the syntax of the email
 #
        # address if checked to make sure it passes a valid syntax.        
 #
        if ($require eq 'email' && !&check_email($Config{$require})) {
            push(@error,$require);
        }

        # Otherwise, if the required field is a configuration field and it 
 #
        # has no value or has been filled in with a space, send an error.  
 #
        elsif (defined($Config{$require})) {
            if (!$Config{$require}) {
                push(@error,$require);
            }
        }

        # If it is a regular form field which has not been filled in or    
 #
        # filled in with a space, flag it as an error field.               
 #
        elsif (!$Form{$require}) {
            push(@error,$require);
        }
    }

    # If any error fields have been found, send error message to the user. 
 #
    if (@error) { &error('missing_fields', @error) }
}

sub return_html {
    # Local variables used in this subroutine initialized.                 
 #
    local($key,$sort_order,$sorted_field);

    # If redirect option is used, print the redirectional location header. 
 #
    if ($Config{'redirect'}) {
        print "Location: $Config{'redirect'}\n\n";
    }

    # Otherwise, begin printing the response page.                         
 #
    else {

        # Print HTTP header and opening HTML tags.                         
 #
        print "Content-type: text/html\n\n";
        print "<html>\n <head>\n";

        # Print out title of page                                          
 #
        if ($Config{'title'}) { print "  <title>$Config{'title'}</title>\n"
}
        else                  { print "  <title>Thank You</title>\n"       
}

        print " </head>\n <body";

        # Get Body Tag Attributes                                          
 #
        &body_attributes;

        # Close Body Tag                                                   
 #
        print ">\n  <center>\n";

        # Print custom or generic title.                                   
 #
        if ($Config{'title'}) { print "   <h1>$Config{'title'}</h1>\n" }
        else { print "   <h1>Thank You For Filling Out This Form</h1>\n" }

        print "</center>\n";

        print "Below is what you submitted to $Config{'recipient'} on ";
        print "$date<p><hr size=1 width=75\%><p>\n";

        # Sort alphabetically if specified:                                
 #
        if ($Config{'sort'} eq 'alphabetic') {
            foreach $field (sort keys %Form) {

                # If the field has a value or the print blank fields option
 #
                # is turned on, print out the form field and value.        
 #
                if ($Config{'print_blank_fields'} || $Form{$field}) {
                    print "<b>$field:</b> $Form{$field}<p>\n";
                }
            }
        }

        # If a sort order is specified, sort the form fields based on that.
 #
        elsif ($Config{'sort'} =~ /^order:.*,.*/) {

            # Set the temporary $sort_order variable to the sorting order, 
 #
            # remove extraneous line breaks and spaces, remove the order:  
 #
            # directive and split the sort fields into an array.           
 #
            $sort_order = $Config{'sort'};
            $sort_order =~ s/(\s+|\n)?,(\s+|\n)?/,/g;
            $sort_order =~ s/(\s+)?\n+(\s+)?//g;
            $sort_order =~ s/order://;
            @sorted_fields = split(/,/, $sort_order);

            # For each sorted field, if it has a value or the print blank  
 #
            # fields option is turned on print the form field and value.   
 #
            foreach $sorted_field (@sorted_fields) {
                if ($Config{'print_blank_fields'} || $Form{$sorted_field})
{
                    print "<b>$sorted_field:</b>
$Form{$sorted_field}<p>\n";
                }
            }
        }

        # Otherwise, default to the order in which the fields were sent.   
 #
        else {

            # For each form field, if it has a value or the print blank    
 #
            # fields option is turned on print the form field and value.   
 #
            foreach $field (@Field_Order) {
                if ($Config{'print_blank_fields'} || $Form{$field}) {
                    print "<b>$field:</b> $Form{$field}<p>\n";
                }
            }
        }

        print "<p><hr size=1 width=75%><p>\n";

        # Check for a Return Link and print one if found.                  
 #
        if ($Config{'return_link_url'} && $Config{'return_link_title'}) {
            print "<ul>\n";
            print "<li><a
href=\"$Config{'return_link_url'}\">$Config{'return_link_title'}</a>\n";
            print "</ul>\n";
        }

        # Print the page footer.                                           
 #
        print <<"(END HTML FOOTER)";
        <hr size=1 width=75%><p> 
        <center><font size=-1><a
href="http://www.worldwidemart.com/scripts/formmail.shtml">FormMail</a>
V1.6 &copy; 1995 -1997  Matt Wright<br>
A Free Product of <a href="http://www.worldwidemart.com/scripts/">Matt's
Script Archive, Inc.</a></font></center>
        </body>
       </html>
(END HTML FOOTER)
    }
}

sub send_mail {
    # Localize variables used in this subroutine.                          
 #
    local($print_config,$key,$sort_order,$sorted_field,$env_report);

    # Open The Mail Program
    open(MAIL,"|$mailprog -t");

    print MAIL "To: $Config{'recipient'}\n";
    print MAIL "From: $Config{'email'} ($Config{'realname'})\n";

    # Check for Message Subject
    if ($Config{'subject'}) { print MAIL "Subject: $Config{'subject'}\n\n"
}
    else                    { print MAIL "Subject: WWW Form Submission\n\n"
}

    print MAIL "Below is the result of your feedback form.  It was
submitted by\n";
    print MAIL "$Config{'realname'} ($Config{'email'}) on $date\n";
    print MAIL "-" x 75 . "\n\n";

    if (@Print_Config) {
        foreach $print_config (@Print_Config) {
            if ($Config{$print_config}) {
                print MAIL "$print_config: $Config{$print_config}\n\n";
            }
        }
    }

    # Sort alphabetically if specified:                                    
 #
    if ($Config{'sort'} eq 'alphabetic') {
        foreach $field (sort keys %Form) {

            # If the field has a value or the print blank fields option    
 #
            # is turned on, print out the form field and value.            
 #
            if ($Config{'print_blank_fields'} || $Form{$field} ||
                $Form{$field} eq '0') {
                print MAIL "$field: $Form{$field}\n\n";
            }
        }
    }

    # If a sort order is specified, sort the form fields based on that.    
 #
    elsif ($Config{'sort'} =~ /^order:.*,.*/) {

        # Remove extraneous line breaks and spaces, remove the order:      
 #
        # directive and split the sort fields into an array.               
 #
        $Config{'sort'} =~ s/(\s+|\n)?,(\s+|\n)?/,/g;
        $Config{'sort'} =~ s/(\s+)?\n+(\s+)?//g;
        $Config{'sort'} =~ s/order://;
        @sorted_fields = split(/,/, $Config{'sort'});

        # For each sorted field, if it has a value or the print blank      
 #
        # fields option is turned on print the form field and value.       
 #
        foreach $sorted_field (@sorted_fields) {
            if ($Config{'print_blank_fields'} || $Form{$sorted_field} ||
                $Form{$sorted_field} eq '0') {
                print MAIL "$sorted_field: $Form{$sorted_field}\n\n";
            }
        }
    }

    # Otherwise, default to the order in which the fields were sent.       
 #
    else {

        # For each form field, if it has a value or the print blank        
 #
        # fields option is turned on print the form field and value.       
 #
        foreach $field (@Field_Order) {
            if ($Config{'print_blank_fields'} || $Form{$field} ||
                $Form{$field} eq '0') {
                print MAIL "$field: $Form{$field}\n\n";
            }
        }
    }

    print MAIL "-" x 75 . "\n\n";

    # Send any specified Environment Variables to recipient.               
 #
    foreach $env_report (@Env_Report) {
        if ($ENV{$env_report}) {
            print MAIL "$env_report: $ENV{$env_report}\n";
        }
    }

    close (MAIL);
}

sub check_email {
    # Initialize local email variable with input to subroutine.            
 #
    $email = $_[0];

    # If the e-mail address contains:                                      
 #
    if ($email =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/ ||

        # the e-mail address contains an invalid syntax.  Or, if the       
 #
        # syntax does not match the following regular expression pattern   
 #
        # it fails basic syntax verification.                              
 #

        $email !~
/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/) {

        # Basic syntax requires:  one or more characters before the @ sign,
 #
        # followed by an optional '[', then any number of letters, numbers,
 #
        # dashes or periods (valid domain/IP characters) ending in a period
 #
        # and then 2 or 3 letters (for domain suffixes) or 1 to 3 numbers  
 #
        # (for IP addresses).  An ending bracket is also allowed as it is  
 #
        # valid syntax to have an email address like: user@[255.255.255.0] 
 #

        # Return a false value, since the e-mail address did not pass valid
 #
        # syntax.                                                          
 #
        return 0;
    }

    else {

        # Return a true value, e-mail verification passed.                 
 #
        return 1;
    }
}

sub body_attributes {
    # Check for Background Color
    if ($Config{'bgcolor'}) { print " bgcolor=\"$Config{'bgcolor'}\"" }

    # Check for Background Image
    if ($Config{'background'}) { print "
background=\"$Config{'background'}\"" }

    # Check for Link Color
    if ($Config{'link_color'}) { print " link=\"$Config{'link_color'}\"" }

    # Check for Visited Link Color
    if ($Config{'vlink_color'}) { print " vlink=\"$Config{'vlink_color'}\""
}

    # Check for Active Link Color
    if ($Config{'alink_color'}) { print " alink=\"$Config{'alink_color'}\""
}

    # Check for Body Text Color
    if ($Config{'text_color'}) { print " text=\"$Config{'text_color'}\"" }
}

sub error { 
    # Localize variables and assign subroutine input.                      
 #
    local($error,@error_fields) = @_;
    local($host,$missing_field,$missing_field_list);

    if ($error eq 'bad_referer') {
        if ($ENV{'HTTP_REFERER'} =~ m|^https?://([\w\.]+)|i) {
            $host = $1;
            print <<"(END ERROR HTML)";
Content-type: text/html

<html>
 <head>
  <title>Bad Referrer - Access Denied</title>
 </head>
 <body bgcolor=#FFFFFF text=#000000>
  <center>
   <table border=0 width=600 bgcolor=#9C9C9C>
    <tr><th><font size=+2>Bad Referrer - Access Denied</font></th></tr>
   </table>
   <table border=0 width=600 bgcolor=#CFCFCF>
    <tr><td>The form attempting to use
     <a
href="http://www.worldwidemart.com/scripts/formmail.shtml">FormMail</a>
     resides at <tt>$ENV{'HTTP_REFERER'}</tt>, which is not allowed to
access
     this cgi script.<p>

     If you are attempting to configure FormMail to run with this form, you
need
     to add the following to \@referers, explained in detail in the README
file.<p>

     Add <tt>'$host'</tt> to your <tt><b>\@referers</b></tt> array.<hr
size=1>
     <center><font size=-1>
      <a
href="http://www.worldwidemart.com/scripts/formmail.shtml">FormMail</a>
V1.6 &copy; 1995 - 1997  Matt Wright<br>
      A Free Product of <a
href="http://www.worldwidemart.com/scripts/">Matt's Script Archive,
Inc.</a>
     </font></center>
    </td></tr>
   </table>
  </center>
 </body>
</html>
(END ERROR HTML)
        }
        else {
            print <<"(END ERROR HTML)";
Content-type: text/html

<html>
 <head>
  <title>FormMail v1.6</title>
 </head>
 <body bgcolor=#FFFFFF text=#000000>
  <center>
   <table border=0 width=600 bgcolor=#9C9C9C>
    <tr><th><font size=+2>FormMail</font></th></tr>
   </table>
   <table border=0 width=600 bgcolor=#CFCFCF>
    <tr><th><tt><font size=+1>Copyright 1995 - 1997 Matt Wright<br>
        Version 1.6 - Released May 02, 1997<br>
        A Free Product of <a
href="http://www.worldwidemart.com/scripts/">Matt's Script Archive,
        Inc.</a></font></tt></th></tr>
   </table>
  </center>
 </body>
</html>
(END ERROR HTML)
        }
    }

    elsif ($error eq 'request_method') {
            print <<"(END ERROR HTML)";
Content-type: text/html

<html>
 <head>
  <title>Error: Request Method</title>
 </head>
 <body bgcolor=#FFFFFF text=#000000>
  <center>
   <table border=0 width=600 bgcolor=#9C9C9C>
    <tr><th><font size=+2>Error: Request Method</font></th></tr>
   </table>
   <table border=0 width=600 bgcolor=#CFCFCF>
    <tr><td>The Request Method of the Form you submitted did not match
     either <tt>GET</tt> or <tt>POST</tt>.  Please check the form and make
sure the
     <tt>method=</tt> statement is in upper case and matches <tt>GET</tt>
or <tt>POST</tt>.<p>

     <center><font size=-1>
      <a
href="http://www.worldwidemart.com/scripts/formmail.shtml">FormMail</a>
V1.6 &copy; 1995 - 1997  Matt Wright<br>
      A Free Product of <a
href="http://www.worldwidemart.com/scripts/">Matt's Script Archive,
Inc.</a>
     </font></center>
    </td></tr>
   </table>
  </center>
 </body>
</html>
(END ERROR HTML)
    }

    elsif ($error eq 'no_recipient') {
            print <<"(END ERROR HTML)";
Content-type: text/html

<html>
 <head>
  <title>Error: No Recipient</title>
 </head>
 <body bgcolor=#FFFFFF text=#000000>
  <center>
   <table border=0 width=600 bgcolor=#9C9C9C>
    <tr><th><font size=+2>Error: No Recipient</font></th></tr>
   </table>
   <table border=0 width=600 bgcolor=#CFCFCF>
    <tr><td>No Recipient was specified in the data sent to FormMail. 
Please
     make sure you have filled in the 'recipient' form field with an e-mail
     address.  More information on filling in recipient form fields can be
     found in the README file.<hr size=1>

     <center><font size=-1>
      <a
href="http://www.worldwidemart.com/scripts/formmail.shtml">FormMail</a>
V1.6 &copy; 1995 - 1997  Matt Wright<br>
      A Free Product of <a
href="http://www.worldwidemart.com/scripts/">Matt's Script Archive,
Inc.</a>
     </font></center>
    </td></tr>
   </table>
  </center>
 </body>
</html>
(END ERROR HTML)
    }

    elsif ($error eq 'missing_fields') {
        if ($Config{'missing_fields_redirect'}) {
            print "Location: $Config{'missing_fields_redirect'}\n\n";
        }
        else {
            foreach $missing_field (@error_fields) {
                $missing_field_list .= "      <li>$missing_field\n";
            }

            print <<"(END ERROR HTML)";
Content-type: text/html

<html>
 <head>
  <title>Error: Blank Fields</title>
 </head>
  <center>
   <table border=0 width=600 bgcolor=#9C9C9C>
    <tr><th><font size=+2>Error: Blank Fields</font></th></tr>
   </table>
   <table border=0 width=600 bgcolor=#CFCFCF>
    <tr><td>The following fields were left blank in your submission
form:<p>
     <ul>
$missing_field_list
     </ul><br>

     These fields must be filled in before you can successfully submit the
form.<p>
     Please use your browser's back button to return to the form and try
again.<hr size=1>
     <center><font size=-1>
      <a
href="http://www.worldwidemart.com/scripts/formmail.shtml">FormMail</a>
V1.6 &copy; 1995 - 1997  Matt Wright<br>
      A Free Product of <a
href="http://www.worldwidemart.com/scripts/">Matt's Script Archive,
Inc.</a>
     </font></center>
    </td></tr>
   </table>
  </center>
 </body>
</html>
(END ERROR HTML)
        }
    }
    exit;
}




------------------------------

Date: Wed, 10 Dec 1997 15:34:12 -0500
From: Aaron Minner <minner@chirondiag.com>
Subject: Cache'ing getpwnam()?
Message-Id: <348EFCC4.1693@chirondiag.com>

Hi there...

Is it a Perl thing or a Unix/OS thing to cache the results
of a getpwnam()/getpwuid()?  My script runs as a daemon to
update the password file, but if a user runs the client again
shortly after the first try, the daemon still has the original
data for the passwords, not the newly changed password.  If I
wait about 10 minutes or so, the password changes are visible.
Seems like an NIS cache'ing thing, but I need to be sure.  Any
idea how to get the changes immediately to the daemon?

Thanks,

Aaron


------------------------------

Date: Wed, 10 Dec 1997 12:42:12 -0800
From: Allen Choy <achoy@us.oracle.com>
Subject: Checking the instance of a class
Message-Id: <348EFEA3.7A7291F1@us.oracle.com>

Hi.

I'm just gotten into the Perl OOP craze recently.  I noticed that Perl
doesn't have an operator to
check if an object is an instance of a class (like in java).  I suppose,
however, that you can
test to see if object string is equal to a certain class, but how do you
do check if a
derived class (subclass) is an instance of a super class?

Thanks--Allen



------------------------------

Date: Wed, 10 Dec 1997 12:30:04 -0800
From: Tom Phoenix <rootbeer@teleport.com>
To: cleighto@ctron.com
Subject: Re: Dynamic array names
Message-Id: <Pine.GSO.3.96.971210122714.15679K-100000@user2.teleport.com>

On Wed, 10 Dec 1997, Corey Leighton wrote:

> Anyone have any suggestions on how I can dynamically name arrays?

Use hard references instead. :-)

> I want to do something like this: 
> 
> open (DIR,"<SOMEPATH>");

Even when your script is "just an example" (and perhaps especially in that
case!) you should _always_ check the return value after opening a file.

> @dir = readdir(DIR):
> closedir(DIR);
> 
> foreach $file (dirs){
> 	@$file = <some stuff>

And if some file is named ARGV, you'll use @ARGV? If one is named dir,
you'll overwrite @dir? This could make your program walk funny. :-) 

Instead, you could make a hash whose keys are the files and whose values
are references to whatever you need. Much safer. Hope this helps!

-- 
Tom Phoenix           http://www.teleport.com/~rootbeer/
rootbeer@teleport.com  PGP   Skribu al mi per Esperanto!
Randal Schwartz Case:  http://www.rahul.net/jeffrey/ovs/
              Ask me about Perl trainings!



------------------------------

Date: Wed, 10 Dec 1997 13:37:15 -0700
From: "John Carse" <carse@ibm.net>
Subject: Re: getting owner of file in NT??
Message-Id: <348efe25.0@news1.ibm.net>

cc'd to Tom manually...

Tom S. Rodman wrote in message <65csrk$u2@solaria.sol.net>...
>Using perl under Windows NT is there a function or
>tool that can be called to give the ownership of a file?
>
>"fileowner.exe" would work, except that I can NOT capture
>the output in a script so far.

use Win32::FileSecurity;






------------------------------

Date: Wed, 10 Dec 1997 12:16:16 -0800
From: Tom Phoenix <rootbeer@teleport.com>
To: plambert$1@plambert.org
Subject: Kanji Perl (was: Re: open and whitespace)
Message-Id: <Pine.GSO.3.96.971210121527.15679I-100000@user2.teleport.com>

On 10 Dec 1997 plambert$1@plambert.org wrote:

> tell me why there is no Kanji version of Perl?

We've been waiting for you to send in the patches. :-)

-- 
Tom Phoenix           http://www.teleport.com/~rootbeer/
rootbeer@teleport.com  PGP   Skribu al mi per Esperanto!
Randal Schwartz Case:  http://www.rahul.net/jeffrey/ovs/
              Ask me about Perl trainings!



------------------------------

Date: 10 Dec 1997 20:19:01 GMT
From: neilb@zetnet.co.uk (Neil Briscoe)
Subject: Re: libperl.so
Message-Id: <memo.19971210201900.59001B@skep.compulink.co.uk.cix.co.uk>

In article <348DB096.9DFA8342@sycon-design.com>, mab@sycon-design.com
(Michael Bezman) wrote:

> Hi !!!
> I am trying to compile perl 5-0004 in order to use static perl library
> libperl.so
> but it fails to compile - complainig : cannot load libperl.a
>
> I am running Linux Red Hat 4.2 I belive with gcc 2.7.1.
> Does anybody know anything about it ?
>

Umm, libperl.so is the dynamic library, libperl.a is the static library.

Regards
Neil




------------------------------

Date: Wed, 10 Dec 1997 12:38:01 -0800
From: Tom Phoenix <rootbeer@teleport.com>
To: Marc Page <PageMan@BigFoot.com>
Subject: Re: Local Array initialized to a constant
Message-Id: <Pine.GSO.3.96.971210123620.15679O-100000@user2.teleport.com>

On 10 Dec 1997, Marc Page wrote:

> Newsgroups: comp.lang.perl.misc, comp.lang.perl.modules

What does this have to do with modules?

> I'm trying to initialize a local array variable to a list of string
> constants.  Here is what I tried:
> 
> 	local(@code)={

That curly brace makes an anonymous hash reference. Literal lists should
normally be written with parens. 

Hope this helps!

-- 
Tom Phoenix           http://www.teleport.com/~rootbeer/
rootbeer@teleport.com  PGP   Skribu al mi per Esperanto!
Randal Schwartz Case:  http://www.rahul.net/jeffrey/ovs/
              Ask me about Perl trainings!



------------------------------

Date: Wed, 10 Dec 1997 12:14:05 -0800
From: Tom Phoenix <rootbeer@teleport.com>
To: Michael Bezman <mab@sycon-design.com>
Subject: Re: malloc
Message-Id: <Pine.GSO.3.96.971210121215.15679H-100000@user2.teleport.com>

On Tue, 9 Dec 1997, Michael Bezman wrote:

> When I was running configure script it asked me about malloc feature -
> does it mean perl is support memory allocation like C ?

Perl has its own malloc code, or you can choose at compile time to use
your vendor's supplied malloc code. Usually the supplied default (which
varies) is the best choice.

In either case, memory allocation is something that Perl takes care of for
you. Unless you're writing an XSUB, you don't need to think about it.

Hope this helps!

-- 
Tom Phoenix           http://www.teleport.com/~rootbeer/
rootbeer@teleport.com  PGP   Skribu al mi per Esperanto!
Randal Schwartz Case:  http://www.rahul.net/jeffrey/ovs/
              Ask me about Perl trainings!



------------------------------

Date: Wed, 10 Dec 1997 15:12:27 -0500
From: Michael Genovese <mikeg@NOSPAMPLEASE.slpma8.ed.ray.com>
Subject: Memory & Page Size
Message-Id: <348EF7AB.4CE5@NOSPAMPLEASE.slpma8.ed.ray.com>

Is there a way (or set of ways, as this Perl script is
meant to eventually work on several UNIX platforms) to
find :

    * Memory Size (real physical memory)
    * Page Size

I need to be able to do this for Solaris, OSF/1, HP-UNIX.




-- 
Mike Genovese, Sr. S/W Engineer
Software Engineering Laboratory, Raytheon, Marlborough, MA
508-490-3891
My opinions are my own, and NOT necessarily those of my employer.


------------------------------

Date: Wed, 10 Dec 1997 13:42:24 -0600
From: Brad Bradley <brad.bradley@bridge.bellsouth.com>
Subject: Re: PERL CGI Parsing
Message-Id: <348EF0A0.B25783ED@bridge.bellsouth.com>

Ruben,

Try posting some code so that we can help troubleshoot it.

> I seem to be having trouble with the two opened files.
> I am not being permited to open one file for reading
> and another for writing.  When I get to the print DATAOUT
> command, I'm getting an error message in the Appache log
> as follows
>
> Undefined subroutine &main::DATAOUT called at
> /var/lib/httpd/cgi-bin/add_lable.cgi line 27
> <DATAIN> chunk1.





------------------------------

Date: Wed, 10 Dec 1997 21:22:49 -0800
From: Jan Krynicky <jan@chipnet.cz>
To: gkaatz@nycap.rr.com
Subject: Re: Perl for Win 32 - please help!
Message-Id: <348F78A9.2CD3@chipnet.cz>

Glen Kaatz wrote:
> 
> I'm trying to use Perl to kick off an Access '97 report.  Below is the
> program I am
> using to do this:
> 
> # Test Perl
> 
> use OLE;
> 
> # ------ Create the Access Object ----------
> $access = CreateObject OLE 'Access.Application.8'
>         or warn "Couldn't create new instance of Access App!!";
> 
> # ------ Open the Access Database File ----------
> $dbname = 'c:\WINNT\Profiles\kaagle.016\Personal\glen97b.mdb';
> $access->OpenCurrentDatabase ('glen97b.mdb')
>         or warn "Couldn't open DB";

Shouldn't this be

	$access->OpenCurrentDatabase ($dbname)
?
It probably is not able to open the file.

> 
> # ------ Run a Macro ----------
> $access->DoCmd->RunMacro('glenr')
>         or warn "Couldn't run macro";
> 
> # ------ Close the Database File ----------
> $access->CloseCurrentDatabase
>         or warn "Couldn't close DB";
> 
> I can create the Access object $access, but I fail on the next 3 steps.
> Does
> anyone know what I'm doing wrong?  Any sample code someplace?
> 
> Thanks,
> Glen Kaatz (gkaatz@nycap.rr.com or bsnenyprg@global2000.com)

Jenda


------------------------------

Date: Wed, 10 Dec 1997 12:32:46 -0800
From: Tom Phoenix <rootbeer@teleport.com>
To: Yash Khemani <khemani@plexstar.com>
Subject: Re: perl module for accessing an ms-access db file on a unix box?
Message-Id: <Pine.GSO.3.96.971210123227.15679M-100000@user2.teleport.com>

On Wed, 10 Dec 1997, Yash Khemani wrote:

> is there a module available for accessing an ms-access
> db file on a unix box 

If there's a module which does what you want, it should be listed in
the module list on CPAN. If you don't find one to your liking, you're
welcome and encouraged to submit one! :-)  Hope this helps!

    http://www.perl.org/CPAN/
    http://www.perl.com/CPAN/

-- 
Tom Phoenix           http://www.teleport.com/~rootbeer/
rootbeer@teleport.com  PGP   Skribu al mi per Esperanto!
Randal Schwartz Case:  http://www.rahul.net/jeffrey/ovs/
              Ask me about Perl trainings!



------------------------------

Date: Wed, 10 Dec 1997 12:39:53 -0800
From: Tom Phoenix <rootbeer@teleport.com>
To: Mousheng Xu <mxu@eecs.ukans.edu>
Subject: Re: print buffer flush
Message-Id: <Pine.GSO.3.96.971210123928.15679P-100000@user2.teleport.com>

On Wed, 10 Dec 1997, Mousheng Xu wrote:

> Subject: print buffer flush

See the $| entry in the perlvar manpage. Hope this helps!

-- 
Tom Phoenix           http://www.teleport.com/~rootbeer/
rootbeer@teleport.com  PGP   Skribu al mi per Esperanto!
Randal Schwartz Case:  http://www.rahul.net/jeffrey/ovs/
              Ask me about Perl trainings!



------------------------------

Date: Wed, 10 Dec 1997 12:31:31 -0800
From: Tom Phoenix <rootbeer@teleport.com>
To: Carsten Posingies <pos@pc-design.de>
Subject: Re: Returning information from an nslookup ??
Message-Id: <Pine.GSO.3.96.971210123039.15679L-100000@user2.teleport.com>

On Wed, 10 Dec 1997, Carsten Posingies wrote:

> are you on a Unix machine? If, you should start your favorite editor,
> hack in some C-lines that do the gethostbyaddr() system call to STDOUT
> and use this in your perl script. 

That seems like a lot of work, since gethostbyaddr is already a builtin.
And there's a module to do any other kind of DNS. Hope this helps!

-- 
Tom Phoenix           http://www.teleport.com/~rootbeer/
rootbeer@teleport.com  PGP   Skribu al mi per Esperanto!
Randal Schwartz Case:  http://www.rahul.net/jeffrey/ovs/
              Ask me about Perl trainings!



------------------------------

Date: 10 Dec 1997 21:00:39 GMT
From: scott@softbase.com
Subject: Re: There's More Than One Way?
Message-Id: <66mvtn$iqp$2@mainsrv.main.nc.us>

John Porter (jdporter@min.net) wrote:
> Quoth Larry, "There's more than one way to do it", as we are all aware.

> This is interesting, philosophically, because it means that 
> For every problem in the universe of problems,
> the number of solutions (in Perl) is >= 1.
> That is, there are no problems which can not be solved in Perl.

> Just a thought... :-)

Well, the flaw in your logic is this: the statement says that for a
problem that *can be solved by Perl*, there is more than one solution.
It says absolutely nothing about problems which *can't be solved by
Perl*. Your conclusion is based on a fallacy, if I remember symbolic
logic's terminology. I can think of many problems Perl couldn't
solve at all.

Scott
--
Look at Softbase Systems' client/server tools, www.softbase.com
Check out the Essential 97 package for Windows 95 www.skwc.com/essent
All my other cool web pages are available from that site too!
My demo tape, artwork, poetry, The Windows 95 Book FAQ, and more. 


------------------------------

Date: 10 Dec 1997 20:19:40 GMT
From: gej@spamalot.mfg.sgi.com (Gene Johannsen)
Subject: Re: There's More Than One Way?
Message-Id: <66mtgs$1j01@fido.asd.sgi.com>

John Porter <jdporter@min.net> writes:

| Quoth Larry, "There's more than one way to do it", as we are all aware.
| 
| This is interesting, philosophically, because it means that 
| For every problem in the universe of problems,
| the number of solutions (in Perl) is >= 1.
| That is, there are no problems which can not be solved in Perl.
| 
| Just a thought... :-)

	Hold on, thaaat's not what that means.  The number of solutions
	may outnumber the number of problems, but there is no guarantee
	that for every problem a solution maps onto it.

gene
(Just trying to keep the optimism in here to a minimum)

| 
| John Porter
| jporter@logicon.com


------------------------------

Date: Wed, 10 Dec 1997 12:26:04 -0800
From: Tom Phoenix <rootbeer@teleport.com>
To: Miten S Mehta <mehta@mama.indstate.edu>
Subject: Re: use lib "$local_lodules_path"
Message-Id: <Pine.GSO.3.96.971210121942.15679J-100000@user2.teleport.com>

On Wed, 10 Dec 1997, Miten S Mehta wrote:

> Subject: use lib "$local_lodules_path"

Using a variable in a 'use lib' declaration is problematic. But since you
don't ask about that, I won't bother you with the details. :-)

> I have a local perl installed in my home dir.  Its in
> /u2/h2/mehta/perl
> 
> I have installed DBI for msql access in site_perl along above path.  
> 
> As I use 
> use DBI;
> 
> The perl program runs fine.  As I use either of
> use lib "/u2/h2/mehta/perl/lib";
> use lib "/u2/h2/mehta/perl/lib/site_perl";
> use lib "/u2/h2/mehta/perl/lib/site_perl/DBI";
> 
> The program is unable to fing a loadable object module for DBI.
> could you guide?

If you compiled your own Perl, it should "know" what to put in @INC in
order to find your local modules. But if you must 'use lib', put that
directive before the 'use DBI'. Pass to 'use lib' the path to DBI.pm, but
not including the name 'DBI.pm' itself. 

If you still can't get it to work, put this debugging line just before the
'use DBI' line and see what it says. 

    BEGIN { print "\@INC is:\n", map "  $_\n", @INC }

Hope this helps!

-- 
Tom Phoenix           http://www.teleport.com/~rootbeer/
rootbeer@teleport.com  PGP   Skribu al mi per Esperanto!
Randal Schwartz Case:  http://www.rahul.net/jeffrey/ovs/
              Ask me about Perl trainings!



------------------------------

Date: 8 Mar 97 21:33:47 GMT (Last modified)
From: Perl-Request@ruby.oce.orst.edu (Perl-Users-Digest Admin) 
Subject: Digest Administrivia (Last modified: 8 Mar 97)
Message-Id: <null>


Administrivia:

The Perl-Users Digest is a retransmission of the USENET newsgroup
comp.lang.perl.misc.  For subscription or unsubscription requests, send
the single line:

	subscribe perl-users
or:
	unsubscribe perl-users

to almanac@ruby.oce.orst.edu.  

To submit articles to comp.lang.perl.misc (and this Digest), send your
article to perl-users@ruby.oce.orst.edu.

To submit articles to comp.lang.perl.announce, send your article to
clpa@perl.com.

To request back copies (available for a week or so), send your request
to almanac@ruby.oce.orst.edu with the command "send perl-users x.y",
where x is the volume number and y is the issue number.

The Meta-FAQ, an article containing information about the FAQ, is
available by requesting "send perl-users meta-faq". The real FAQ, as it
appeared last in the newsgroup, can be retrieved with the request "send
perl-users FAQ". Due to their sizes, neither the Meta-FAQ nor the FAQ
are included in the digest.

The "mini-FAQ", which is an updated version of the Meta-FAQ, is
available by requesting "send perl-users mini-faq". It appears twice
weekly in the group, but is not distributed in the digest.

For other requests pertaining to the digest, send mail to
perl-users-request@ruby.oce.orst.edu. Do not waste your time or mine
sending perl questions to the -request address, I don't have time to
answer them even if I did know the answer.


------------------------------
End of Perl-Users Digest V8 Issue 1449
**************************************

home help back first fref pref prev next nref lref last post