in reply to perldoc.cgi
Rather neat. Couple of minor suggestions. The first is mainly because it needs at least one char to search for (or it dies voluminously which 2 > is also designed to fix). If you used a var rather than the hardcode name the script is renamable.
- uri_unescape($ENV{QUERY_STRING}) =~ /^([\w\s:-]*)$/ + uri_unescape($ENV{QUERY_STRING}) =~ /^([\w :-]+)\z/ - exec "perldoc -u $1|pod2html --header --title='$1'"; + exec "perldoc -u $1|pod2html --header --title='$1' 2>/dev/null";
You don't really need the fork.....
#!/usr/bin/perl -w use strict; use URI::Escape; $|++; $0 =~ m!([^/\\]+)$!; my $script = $ENV{SCRIPT_NAME} || $1 || 'perldoc.cgi'; print "Content-type: text/html\n\n"; $ENV{QUERY_STRING} or error( "Usage $script?command<br>Try $script?per +ldoc\n" ); uri_unescape($ENV{QUERY_STRING}) =~ /^\s*([\w :-]+)\s*\z/ or error( "Bad query string: '$ENV{QUERY_STRING}'\n" ); chdir '/tmp'; open DOC, "perldoc -u $1|pod2html --header --title='$1' 2>/dev/null |" or error( "Could not exec perldoc or pod2html. $!\n" ); while (<DOC>) { s{href="/([^."]+)\.html} { local $_= $1; s|/|::|g; qq!href="$script?$_! }gei; print; } close DOC; sub error { print "Error: ", shift; exit };
|
|---|