Gibble has asked for the wisdom of the Perl Monks concerning the following question:

Is it possible to run a perl cgi script from the command line? What I mean is when the cgi script is called from the browser it uses a line like mycgi.pl?var1=val&var2=val is it possible to run this from the console like: perl mycgi.pl?var1-val&var2=val I have noticed that doing it like that doesn't work but am wondering if there is another way... TIA

Replies are listed 'Best First'.
Re: CGI and Perl
by btrott (Parson) on Dec 22, 2000 at 03:08 UTC
    If you're using CGI.pm it has a special interactive mode that allows you to run Perl scripts from the command line. Just run the script w/o args and you'll be dropped into that mode.

    You can also give it the args on the command line.

    % perl mycgi.pl var1=val var2=val
    If you're not using CGI.pm, this is yet another reason why you should be. :)

    Update: As jeffa pointed out, when using the interactive mode you should enter your key-value pairs, followed by a CNTL-D when you're done.

      And the latest versions of CGI.pm requires you to import the '-debug' flag to turn that feature on:
      use CGI qw(-debug);
      And I often just cut and paste a query string from the browser to a file so I can just do something like this from the command line (and have all the parameters saved so I can edit them at will):
      my_cgi_script.cgi <query.in

      If you're running on Windows - that's a CTRL-Z.

      --
      <http://www.dave.org.uk>

      "Perl makes the fun jobs fun
      and the boring jobs bearable" - me

      Here is the code I am using and it doesn't seem to be working.

      #!d:/perl/bin/perl.exe -w require "authenticate.pl"; #If not authorized then don't continue exit if (! &AdminLogin); #If authorized then build the appropriate page. $perl = sub { qx/perl createHTML.pl htmt=admin.htmt xml=webboard.xml xsl=listbox.x +sl/; }; print "Content-Type: text/html \n\n"; print "OUTPUT: " . &$perl;

      It is running the createHTML.pl cgi script but it that script doesn't appear to be getting the query string to be parsed. It still recieves everything in @ARGV? adn &ReadParse; isn't parsing it.
        Either build createHTML.pl as a normal script accepting normal arguments, or use CGI.pm and use it as a CGI script. Be advised that you'll probably end up printing two sets of CGI headers doing this, though (at least how your code is set up now). I have no idea what &ReadParse is (some cgi-lib.pl thing?), so I can't tell how it's attempting to parse your command line. I suspect CGI.pm will pick it up fine (and if not, try adding the -debug option to the 'use' option list for CGI).

        If you're going to be doing a lot of this type of thing, you might be better off turning createHTML.pl into a module, and 'use'ing that module in this script, and a new, simplified createHTML.pl script. That would let you avoid having to spawn off new Perl scripts to do additional processing.

        Does createHTML import the -debug flag?:
        use CGI qw(-debug); # or something like: use CGI qw(:standard -debug);