Perl CGI


 
Thread Tools Search this Thread
Operating Systems OS X (Apple) Perl CGI
# 1  
Old 06-17-2013
Perl CGI

I am trying to get my MacBook Pro with 10.8 Mt Lion set up to run Perl CGI scripts.

Having a problem. I can start Apache Web Server with no problems.

Why do I put the static and dynamic scripts? I which directory?

I have looked at this article:
https://discussions.apple.com/docs/DOC-3083

Below is a snapshot of my

Code:
$perl -V

Summary of my perl5 (revision 5 version 12 subversion 4) configuration:
   
  Platform:
    osname=darwin, osvers=12.0, archname=darwin-thread-multi-2level
    uname='darwin b1017.apple.com 12.0 darwin kernel version 12.0.0: tue may 15 23:31:29 pdt 2012; root:xnu-2050.6.70~1release_x86_64 x86_64 '
    config_args='-ds -e -Dprefix=/usr -Dccflags=-g  -pipe  -Dldflags= -Dman3ext=3pm -Duseithreads -Duseshrplib -Dinc_version_list=none -Dcc=clang'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=define, usemultiplicity=define
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='clang', ccflags ='-arch i386 -arch x86_64 -g -pipe -fno-common -DPERL_DARWIN -fno-strict-aliasing -fstack-protector -I/usr/local/include',
    optimize='-Os',
    cppflags='-g -pipe -fno-common -DPERL_DARWIN -fno-strict-aliasing -fstack-protector -I/usr/local/include'
    ccversion='', gccversion='4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='clang -mmacosx-version-min=10.8', ldflags ='-arch i386 -arch x86_64 -fstack-protector -L/usr/local/lib'
    libpth=/usr/local/lib /usr/lib
    libs=-ldbm -ldl -lm -lutil -lc
    perllibs=-ldl -lm -lutil -lc
    libc=, so=dylib, useshrplib=true, libperl=libperl.dylib
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
    cccdlflags=' ', lddlflags='-arch i386 -arch x86_64 -bundle -undefined dynamic_lookup -L/usr/local/lib -fstack-protector'


Characteristics of this binary (from libperl): 
  Compile-time options: MULTIPLICITY PERL_DONT_CREATE_GVSV
                        PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP USE_64_BIT_ALL
                        USE_64_BIT_INT USE_ITHREADS USE_LARGE_FILES
                        USE_PERLIO USE_PERL_ATOF USE_REENTRANT_API
  Locally applied patches:
	/Library/Perl/Updates/<version> comes before system perl directories
	installprivlib and installarchlib points to the Updates directory
  Built under darwin
  Compiled at Jun 16 2012 10:12:45
  @INC:
    /Library/Perl/5.12/darwin-thread-multi-2level
    /Library/Perl/5.12
    /Network/Library/Perl/5.12/darwin-thread-multi-2level
    /Network/Library/Perl/5.12
    /Library/Perl/Updates/5.12.4
    /System/Library/Perl/5.12/darwin-thread-multi-2level
    /System/Library/Perl/5.12
    /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level
    /System/Library/Perl/Extras/5.12
    .

Thanks.

Last edited by Scott; 06-17-2013 at 10:55 AM.. Reason: Please use code tags and a DESCRIPTIVE subject title next time
# 2  
Old 06-20-2013
Usually, cgi goes in /cgi-bin or something like that in the web tree. Apache configuration allows you to specify which local dir is the head of the cgi tree and where to make it accessible in the web tree. Apache Tutorial: Dynamic Content with CGI - Apache HTTP Server
# 3  
Old 06-23-2013
Ok, I believe I have the apache configuration issue worked out. I can start Apache and go:

Code:
www.localhost/~djehres/cgi-bin

and my files ( *.pl ) show up.

But the html tags also show. Why would that happen?

This is how it looks when I execute the script:

Code:
Content-type: text/html
<HTML>
<HEAD>
<TITLE>Welcome to my page</TITLE>
</HEAD>
<BODY>
Hello world, this is my HTML page.
</BODY>
</HTML>

thanks.
# 4  
Old 06-24-2013
What is a tag? You cgi-bin should contain only executables that process CGI. Often, a parallel directory holds images, maybe a parallel directory for non-html documents and the parent holds html. If the world gets crowded, subtrees to support categories can be added.

I wrote a pair of scripts as a shell tutorial of CGI:
Code:
$ pg mysrc/show_env mysrc/show_env_form|cat
::::::::::::::
mysrc/show_env
::::::::::::::
#!/bin/sh
echo 'HTTP/1.0 200 OK
Content-type: text/plain\r
\r
Environment of CGI:
'
set|cat -vt
if [ "$REQUEST_METHOD" = "POST" ]
then
 echo "
For POST, the first line of stdin:
"
 line|cat -vt
 echo
fi

::::::::::::::
mysrc/show_env_form
::::::::::::::
#!/bin/bash
# All scripts should begin with this interpreter file line one for exec()!
# They must have executable file permission, or exec() pipes them to sh!
# The #! line can have one arg, useful for things like sed, which needs a '-f'.
# The real, final line executed is:
#  /usr/bin/ksh <any_#!_line_arg> <script_file_name> <any_orig_cmd_line_args>
# Comments are our friends, as we, at least, are suppose to remember what we did
#  and fix it quickly when it breaks!
# Use of the ksh in Solaris allows access to the <() construct,
#  which allows the service to spin off several simultaneous child scripts
#  but collect their output from pipes sequentially.
# Of course, the child script may stall if it writes the pipe too soon,
#  but most UNIX appliations write their FILE * stdout
#  without prematurely flushing its large default buffer.
cat <(
# Begin first <() child script!
# echo out initial boilerplate (not varying) text
#  in single quotes for least shell expansion and to pass double quotes.
# CGI starts in the second line of http header out, so you can add http bits
#  like content type, length, encoding, cookies, language, etc.
# The blank line terminates the http and starts the content.
# The carriage returns are important to some browsers at the http level.
# Once you get to the content, it is all just white space.
# UNIX likes just a line feed, Apple likes just the carriage return, and
#  WinDOS likes both, just like the teletype, where one moved the paper feed
#  and the other the print head carriage, and
#  the carriage return is first because it was usually the larger, slower motion.
# HTML mostly ignores and hides white space, so make it easily readable.
# Sentences can be put on separate source lines for easy version control.
# A little indentation makes the tag control areas more obvious, and
#  will not slow things down appreciably.
# The title should be a full or abbreviated version of the first heading.
# The title is used to bookmark, so make it terse and globally relevant,
#  e.g., not "Home Page" but "David G. Pickett - Home Page".
# ISINDEX is a simple (crude) way to add form-like capability. This element
#  is deprecated under the strict HTML 4 specification and should not be used.
# Use of values that do not have embedded symbols and blanks
#  means no double-quoting of values is necessary
#  and no URLdecode is needed to get original values back.
echo 'HTTP/1.0 200 OK
Content-type: text/html
Expires: Tue, 20 Aug 1996 14:25:27 GMT
<HTML>
 <HEAD>
  <TITLE>Forms That Call show_env</TITLE>
  <META http-equiv="Expires" content="Tue, 20 Aug 1996 14:25:27 GMT">
  <ISINDEX PROMPT="ISINDEX PROMPT" HREF=show_env>
 </HEAD>
 <BODY>
  <H1>Forms That Call show_env to show how simple HTML and CGI work!</H1>
  <HR>
  <H2>Get (default action) form</H2>
  <FORM ACTION=show_env>
   <INPUT TYPE=HIDDEN NAME=name1 VALUE=value1>
   Name: <input type=text size=10 maxlength=40 name=nm value="Your Name"><br>
   Password: <input type="password" name="pw" value=1234><Br>
   <INPUT TYPE=checkbox checked NAME=name2 VALUE=value2a> value2a<BR>
   <INPUT TYPE=checkbox checked NAME=name2 VALUE=value2b> value2b<BR>
   <INPUT TYPE=checkbox checked NAME=name2 VALUE="value2c&name2_1=value_2c_1"> value2c&amp;name2_1=value_2c_1<BR>
   <input type="radio" name="shade" value="dark">Dark<BR>
   <input type="radio" name="shade" value="light" checked>Light<br>
   <select multiple name=music size=4>
    <option value="emo" selected>Emo</option>
    <option value="metal/rock" >Metal/Rock</option>
    <option value="hiphop" >Hip Hop</option>
    <option value="ska" >Ska</option>
    <option value="jazz" >Jazz</option>
    <option value="country" >Country</option>
    <option value="classical" >Classical</option>
    <option value="alternative" >Alternative</option>
    <option value="oldies" >Oldies</option>
    <option value="techno" >Techno</option>
   </select><br>
   <textarea rows=5 cols=20 name=cmts>
    Enter Comments Here
   </textarea><br>
   <INPUT TYPE=RESET> 
   <INPUT TYPE=SUBMIT NAME=name3a VALUE=Value3a>
   <INPUT TYPE=SUBMIT NAME=name3b VALUE=Value3b>
  </FORM>
  <HR>
  <H2>Get Hypertext ?name=value</H2>
  <A HREF="show_env?name4=value4&name5=value5">Click me!</A>
  <HR>
  <H2>Get Hypertext ?value</H2>
  <A HREF="show_env?value6">Click me!</A>
  <HR>
  <H2>POST Form</H2>
  <FORM ACTION=show_env METHOD=POST>
   <INPUT TYPE=HIDDEN NAME=name7 VALUE=value7>
   <INPUT TYPE=HIDDEN NAME=name8 VALUE=value8>
   <INPUT TYPE=checkbox checked NAME=name2 VALUE="value2c&name2_1=value_2c_1"> value2c&amp;name2_1=value_2c_1<BR>
   <INPUT TYPE=SUBMIT NAME=name9 VALUE=Value9>
  </FORM>
  <HR>
  GET is assumed to be a simple inquiry, and can be repeated gratuitously to keep the cache or history fresh without user permission.
  Use of an Expires: with a near or past value on an http line (or in a corrsponding http-equiv meta statement in the HEAD) can help force such refreshes.
  Both are illustrated above.<P>
  For POST, the browser assumes the submit changes the real world, and resists gratuitous additional posting of the request.
  However, sometimes POST is used to not show the values in the URL, for reasons of size, appearance, and some small security.<P>
  POST variables in the default URL-encode mode are presented on standard input, which is the http socket, not the URI which CGI puts into the environment.
  Popular browsers present them on a line that always has a carriage return and line feed (preceded by a carriage return), but a few do not, they expect you to read the Content-length bytes and stop, so they are not friendly to the shell and other line oriented tools.<P>
  POST in MIME multipart encoding allows you to have forms that upload file contents along with variables and the orignal file name, which may be a relative or absolute path.<P>
  POST allows you to have forms that email the variables using a mailto: action URL.
  While this is very minimalist (no http/web server required), it does not allow the user'"'"'s view of the page to change after submit, in confirmation of the submit, which is not user friendly.
  The submitting email activity either occurs quickly and entirely in the background, encourging duplicate submission, or triggers an email dialog that the user must complete correctly for the submission to occur, which is less robust and more effort.
  <HR>
  <H2>This Service</H2>
  <PRE>
'
# end first child script
) <(
# begin second child script (overkill as an example)
# To illustrate <PRE>, this service will present itself as readable text. 
# Use of <PRE> allows plain, fixed pitch fonts, does no folding,
#  and turns off space and linefeed presentation as a single space,
#  but still allows HTML tags, e.g., below, the comments are made bold.
# However, you have to make 4 critical metacharacters into metastrings.
sed '
        s/\&/\&amp;/g
        s/"/\&quot;/g
        s/</\&lt;/g
        s/>/\&gt;/g
        s/^#.*/<B>&<\/B>/
 ' $(whence $0)
# end second child script
) <(
# begin third child script
# Show CGI Environmental variables
echo '<HR>
<H2>Current CGI Environmental variables</H2>'
sh -c set|cat -vt|sed '
        s/\&/\&amp;/g
        s/"/\&quot;/g
        s/</\&lt;/g
        s/>/\&gt;/g
 '
echo '
   <HR>
   <H2>Show what this service sends out (Beware recursion confusion!)</H2>
'
if [ "$zOnce" = "" ]
then
 export zOnce=NO_RECURSION
# Except, of course, this, to avoid recursion
$0|cat -vt|sed '
        s/\&/\&amp;/g
        s/"/\&quot;/g
        s/</\&lt;/g
        s/>/\&gt;/g
 '
fi
# echo out final boilerplate like we did for starting boilerplate.
echo '
   <HR>
  </PRE>
 </BODY>
</HTML>
'
# end final child script
)

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

PERL-CGI learning

Hello All, I am actually learning PERL and more interested to learn CGI script too. Can any suggest a forum or weblink which is more helpful for a dummy CGI developer. Thanks (6 Replies)
Discussion started by: posix
6 Replies

2. Shell Programming and Scripting

CGI Perl : while loop in CGI perl

Hi Team, I am trying to connect to database(succeeded ) and print the records on the browser using while loop. But the elements of array are not displayed instead while loop is displayed directly. Instead of the below I can embed html statements in print but I am looking for the below style as I... (1 Reply)
Discussion started by: scriptscript
1 Replies

3. Shell Programming and Scripting

Perl CGI : unable to download the excel sheet from perl cgi page

Hi All, I have written an cgi perl script that displays an image(Excel image) and when clicked on that Image I need to download a excel sheet. I made sure that excel sheet exists in the folder with the given name but still I am not able to download the sheet. print "<center><table... (2 Replies)
Discussion started by: scriptscript
2 Replies

4. Shell Programming and Scripting

Perl cgi pages out of cgi-bin folder in WINDOWS

Hi team, I have a typical problem with cgi pages in apache webserver in WINDOWS I am able to execute(display) the pages that are saved in cgi-bin folder. But I am not able to execute the pages stored in htdocs or other folder other than cgi-bin folder. Could anyone please let me know how... (1 Reply)
Discussion started by: scriptscript
1 Replies

5. Shell Programming and Scripting

CGI in Perl

Hi, Am unfamiliar with using CGI modules in Perl. Though i checked in few sites about CGI , i dint get a clear idea. Can anyone please explain me the purpose of these statements, it ll be very helpful to me #!/usr/bin/perl use CGI qw/:standard/; use Storable; use Data::Dumper; my... (1 Reply)
Discussion started by: irudayaraj
1 Replies

6. Web Development

problem with exporting vairable from one perl cgi to another perl cgi script while redirecting.

Can anyone tell me how to export a variable from one perl CGI script to another perl cgi script when using a redirect. Upon running the login.pl the user is prompted to enter user name and password. Upon entering the correct credentials (admin/admin) the user is redirected to welcome page. My... (3 Replies)
Discussion started by: Arun_Linux
3 Replies

7. Shell Programming and Scripting

Perl CGI Query

Hi All, This is quite a high level question so I appologise as if it sounds a bit woolly! I'm running a script via apache's cgi-bin that calls another Perl script (from a browser): http://192.168.000.000/cgi-bin/run_script.pl?SCRIPT=test.pl&text=RANDOM+TEXT&INPUT1=444444444444 This... (4 Replies)
Discussion started by: pondlife
4 Replies

8. Shell Programming and Scripting

checkbox_group => CGI, Perl

Hi, In my cgi script(written in Perl using cgi.pm) i have a checkbox and i want all the items to be checked. Here is what i use: checkbox_group(-name=>'studenten_in_groep', -values=>\@member_keys, -defaults=>\@member_keys, -labels=>\%temp_members, -columns=>2), But no boxes are checked...... (18 Replies)
Discussion started by: tine
18 Replies

9. Shell Programming and Scripting

Learning CGI using Perl

hi everyone, i am learning CGI using Perl, but i am having problem to compile and run the scripts. the thing is that, when i want to compile my scripts i have to get connected to the internet and have to upload the scripts to a server and then only i can compile and run my scripts. so, can... (2 Replies)
Discussion started by: shifan
2 Replies

10. Shell Programming and Scripting

Perl CGI.pm

my box is FreeBSD4.3 and I use Perl 5.0005_03. Here is the CGI script. test.cgi ...... if ($query->action eq 'detail') { ...... print $query->hidden('action', 'modify'); ...... } I found that the result of test.cgi?action=detail is not what I expected. the script does not... (4 Replies)
Discussion started by: tonyt
4 Replies
Login or Register to Ask a Question

Featured Tech Videos