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

Is there a way to execute a perl script from the HTML and pass parameter to the perl script? say, variables form the HTML form? any help would be appreciated, thanks.

Replies are listed 'Best First'.
Re: Perl parameters
by Happy-the-monk (Canon) on Apr 01, 2004 at 23:47 UTC

    Have a look at perldoc CGI ... better still, read on on this site, there is a lot about it to be found. For a fast start, proceed to the CGI section in Tutorials

    Cheerio, Sören

Re: Perl parameters
by neniro (Priest) on Apr 02, 2004 at 13:06 UTC
    Sorry, if I misunderstood the question. If you want to execute a perl script as CGI, you have to mention Happy-the-monks post. If you want to start a existing perl-script on your server, and you just want a simple frontend, you can do it using a CGI like this:
    #!/usr/bin/perl use strict; use warnings; use CGI; use CGI::Carp qw ( fatalsToBrowser ); my $q = new CGI; my $host = $q->param('host') || ''; if ($host =~ m/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { my $result = qx ( ping $host ); print $q->header(), $q->start_html('ping IP'), $q->p($result), $q->end_html; } else { die "No IP, no ping!\n"; } exit();
    Remember, to use -t for security reasons.

    Some explanation:

  • it is a simple CGI, you can put it in your /usr/lib/cgi-bin or whereever the cgi-bin directory is on your system.
  • always validate users input using some regexes.
  • the above script dies unless the $host looks like an IP.
  • I use qx to call ping. pings output is assigned to $result. You can call your script this way, if you have the right to do so, else you should try using sudo on a Unix-like system.

    I've to thank Happy-the-monk for some advice.
    neniro

Re: Perl parameters
by ambrus (Abbot) on Apr 02, 2004 at 21:50 UTC

    First, take the html, and change all &gt to <, &amp to & etc. Then, make sure the code in the hmtl contains no html tags embedded, like <FONT> for syntax coloring etc. Make sure that the perl code ends with __END__ or __DATA__. And then, read about the -x switch in perlrun.