-$ENV{PATH}="/usr/local/bin:/usr/bin:/bin";
-my ($srcdir, $templatedir, $destdir, %links, %oldlinks, %oldpagemtime,
- %renderedfiles, %pagesources);
-my $wiki_link_regexp=qr/\[\[([^\s]+)\]\]/;
-my $wiki_file_regexp=qr/(^[-A-Za-z0-9_.:\/+]+$)/;
-my $wiki_file_prune_regexp=qr!((^|/).svn/|\.\.|^\.|\/\.|\.html?$)!;
-my $verbose=0;
-my $wikiname="wiki";
-my $default_pagetype=".mdwn";
-my $cgi=0;
-my $url="";
-my $cgiurl="";
-my $historyurl="";
-my $svn=1;
-my $anonok=0;
+my (%links, %oldlinks, %oldpagemtime, %renderedfiles, %pagesources);
+
+my %config=( #{{{
+ wiki_file_prune_regexp => qr{((^|/).svn/|\.\.|^\.|\/\.|\.html?$)},
+ wiki_link_regexp => qr/\[\[([^\s]+)\]\]/,
+ wiki_file_regexp => qr/(^[-A-Za-z0-9_.:\/+]+$)/,
+ verbose => 0,
+ wikiname => "wiki",
+ default_pageext => ".mdwn",
+ cgi => 0,
+ url => "",
+ cgiurl => "",
+ historyurl => "",
+ svn => 1,
+ anonok => 0,
+ rebuild => 0,
+ wrapper => 0,
+ srcdir => undef,
+ destdir => undef,
+ templatedir => undef,
+); #}}}
+
+GetOptions( #{{{
+ "wikiname=s" => \$config{wikiname},
+ "verbose|v!" => \$config{verbose},
+ "rebuild!" => \$config{rebuild},
+ "wrapper!" => \$config{wrapper},
+ "svn!" => \$config{svn},
+ "anonok!" => \$config{anonok},
+ "cgi!" => \$config{cgi},
+ "url=s" => \$config{url},
+ "cgiurl=s" => \$config{cgiurl},
+ "historyurl=s" => \$config{historyurl},
+ "exclude=s@" => sub {
+ $config{wiki_file_prune_regexp}=qr/$config{wiki_file_prune_regexp}|$_[1]/;
+ },
+) || usage();
+
+usage() unless @ARGV == 3;
+$config{srcdir} = possibly_foolish_untaint(shift);
+$config{templatedir} = possibly_foolish_untaint(shift);
+$config{destdir} = possibly_foolish_untaint(shift);
+if ($config{cgi} && ! length $config{url}) {
+ error("Must specify url to wiki with --url when using --cgi");
+} #}}}