'02.2.12 ('03.1.18更新)
全世界に公開するにしても同じように設定しますが、たぶんローカルテストのために使いたい人が大多数じゃないでしょうか。というわけで「ローカル」です。
OS Xの基礎はUNIXです。Web共有のためのサーバはApacheですし、PerlもUNIX用のものが標準で入っています。テスト環境としては理想的ですね。
そして、なんと、特に設定を変えずとも最初から CGIが使えるんですよ。ほんのちょっと、UNIX的なコマンドラインの操作も必要ですが。
(OS 9までの方法は別ページで)
さらに
Mac OS XのPerlのパスは /usr/bin/perl です。設置サーバに合わせて /usr/local/bin/perl でも動くようにする方法も後述しますが、まずはプログラムの方を書き換えて、とにかく動かしてみましょう。テストだけなら、OS X付属のプログラムファイル、printenvを試すのもよいでしょう (後述)。
従来のMacはCRでしたが、OS XはUNIXなのでLFが基本になります。TextEdit (テキストエディット)では、改行すればLFになりますが、よそからコピーしてくるとCRでも改行して表示して、見分けがつかないので要注意です。
CGIのファイルは /Library/WebServer/CGI-Executables/ ディレクトリに入れて実行します。一方、Webサーバのルートは /Library/WebServer/Documents/ になります。
既にprintenvとtest-cgiというファイルが入ってますね。printenvは環境変数表示のPerlスクリプトです。これを試してもかまいませんが、パーミッションの設定は必要です。test-cgiはシェルスクリプトです。

実行権は、Finderの「情報を見る (インスペクタ)」では設定できません。ここだけはUNIXのコマンドラインによる操作が必要です。
アプリケーションのUtilitiesの「Terminal (ターミナル)」を起動して設定します。
置いたのがhoge.cgiなら、
chmod 755 /Library/WebServer/CGI-Executables/hoge.cgi
と記入してreturnです (上記をコピーしてペーストもできます)。(Terminal (ターミナル) では、入力し終わったらreturnキーを押してコマンド実行です)

Terminal (ターミナル) を終える時は exit とタイプします。(今回は他に何もしていないので、いきなり「Terminal (ターミナル) を終了」でも大丈夫)
printenvのパーミッションを変える時は、管理者権限が必要なのでsudoを使います。(sudoをコマンドの前に入れることによって、管理者権限でコマンド実行できます)
sudo chmod 755 /Library/WebServer/CGI-Executables/printenv
と入力します。パスワードを聞かれますから、(変えてなければ) OS Xインストール時の管理パスワードを記入しreturnです。
コマンドラインを使わなくてもパーミッション変更できるソフトもあります。BatChmod (フリーウェア)。実行権追加だけなら、system OSAXというAppleScriptでShellコマンドを使えるようにするOSAXの、付属のScriptでもできます。
システム環境設定の「共有」でWeb共有を「開始」します。インターネットに繋いだままの状態だと、全世界に公開することになってしまうので注意してください。ルータ経由でWebの非公開設定になっていれば大丈夫ですが。(大抵のルータの初期設定では非公開ですが、よくわからないなら安全第一に、Ethernetケーブルを外して試しましょう。また、Web共有をオンにしたままだと、再起動してもオフになりません。終わったらオフにしましょう)

OS X10.2では「共有」の「サービス」の「パーソナルWeb共有」を選んで「開始」。または、「パーソナルWeb共有」のチェックボックスクリック。
http://localhost/cgi-bin/hoge.cgi あるいは http://127.0.0.1/cgi-bin/hoge.cgi とCGIを呼び出します。
http://localhost/ あるいは http://127.0.0.1/ がトップページですね。

簡単でしょう。
ただし、CGI-Executables ディレクトリの中にCGI実行ファイル以外のファイルを置いても、呼び出すことはできません。(CGIとして実行しようとしてサーバエラーになります。その方が安全ですが)
OS X デフォルトの /usr/bin/perl に加え /usr/local/bin/perl でも動くようにします。
sudo mkdir /usr/local/bin
で bin ディレクトリを作って、
sudo ln -s /usr/bin/perl /usr/local/bin/perl
で、その中に perl のシンボリックリンクを作ります。

本当は、UNIX的にはユーザのSitesディレクトリ内だけで操作したいところですね。設置サーバとディレクトリ構成を合わせるためにも、もっと自由にCGIファイルを置きたいですし。というわけで、Sitesディレクトリ内でCGIの実行を可能にしてみましょう。
/etc/httpd/users にある name.conf (nameはユーザ名) を書き換えます。しかし、users はFinder上では通常見えないディレクトリですし、ユーザにはname.confファイルを書き換える権限もありません。UNIXに慣れた人なら何も問題有りませんが、Macユーザなら、コマンドラインの入力は最小限にしたいですね (権限上必要なsudo使用時くらいにね)。
書き換え方法は色々考えられます。たとえば、
ここでは4の方法の解説をします。(このページオリジナル?)
sudo cp ~/Documents/name.conf /etc/httpd/users
と入力し、書き換えたファイルをオリジナルに上書きコピーします。
書き換え内容
下記はデフォルト。
<Directory "/Users/name/Sites/">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
CGI実行可能にするためには、下記のように追記します。
<Directory "/Users/name/Sites/"> AddHandler cgi-script cgi Options Indexes MultiViews ExecCGI AllowOverride None Order allow,deny Allow from all </Directory>
ついでにSSIも実行可能にするなら。
<Directory "/Users/name/Sites/"> AddType text/html shtml AddHandler server-parsed shtml AddHandler cgi-script cgi Options Indexes MultiViews ExecCGI Includes AllowOverride None Order allow,deny Allow from all </Directory>
ついでにindex.shtmlをindexファイルに追加するなら。
<Directory "/Users/name/Sites/"> AddType text/html shtml AddHandler server-parsed shtml AddHandler cgi-script cgi Options Indexes MultiViews ExecCGI Includes AllowOverride None Order allow,deny Allow from all <IfModule mod_dir.c> DirectoryIndex index.html index.shtml </IfModule> </Directory>
上記の内容を丸ごとコピーペーストすると、改行コードがCRになったりするので注意してください。改行コードはすべてLFにします (TextEdit (テキストエディット)でreturn入力すればLFになります)。nameは自分のユーザ名に置き換えること。
ブラウザの呼び出しは、http://localhost/~name/hoge.cgi あるいは http://127.0.0.1/~name/hoge.cgi です (nameはユーザ名で置き換え)。サブディレクトリの中に置いてもCGIは動きます。
その他:
これもname.confを書き換えます。
/Library/WebServer/Documents/ で有効にするなら、/etc/httpd/httpd.conf の
<Directory "/Library/WebServer/Documents"></Directory>の中を書き換えます。
# デフォルト AllowOverride None
# 書き換え後
AllowOverride All
OS Xでは頭に「.」(ドット) が付くファイルはFinderで表示されません。下記のいずれかの方法を使います。
# ドットを付ける mv htaccess .htaccess
# ドットを取る mv .htaccess htaccess
# デフォルト AccessFileName .htaccess
# 書き換え後
AccessFileName htaccess
Apacheのデフォルトでは「.ht」から始まるファイルはWebから読まれないようになっています。ところが、OS X (のHFS+フォーマット) ではファイル名の大文字小文字を区別しないので、「.Htaccess」とアクセスすれば読めてしまいます。全世界に公開する人は「HFS+フォーマットの落とし穴と不可視ファイル」を必ず読んでください。
@nifty等、サーバによってはオーナー権限でCGIを実行するようになっていますね。その方がパーミッションを厳しくできて安全だし、CGIが作ったファイルを消せなくなったりしない利点もあります。逆に権限が強くなる副作用もあって、Apacheで使うsuEXECというプログラムでは、ディレクトリやパスの制限等、安全度を高める工夫がしてあります。しかし、インストールにはApacheをコンパイルする必要があり、ローカルでCGIのテストをするだけには、ちょっと面倒です。(本当にsuEXECを設定する人は「Mac OS XにsuEXECを」)
ここでは、ローカルで動作確認用として動かす事を前提に、Apacheそのものをオーナー権限で実行してみましょう。この方法は恐ろしく簡単ですが、逆に危険度が増します。公開するサーバでこの設定をしてはいけません。
/etc/httpd/httpd.conf の以下の部分のwwwを自分のユーザ名に書き換えるだけです。
# デフォルト User www
# 書き換え後
User name
suEXECではCGIの実行だけがオーナー権限になりますが、上記は一般ページのブラウズもすべてオーナー (というか自分の) 権限になります。不特定多数の人にその権限でアクセスさせるのは危険です。あくまで、ローカルでのテスト用としてだけ使ってください。うっかり公開にも充分気をつけて。
name.confを書き換えるなら、ついでにアクセス制限もしてみましょう。ローカルだけの利用に制限します。ディレクトリとファイルへのアクセスの制限ですから、サーバにアクセスされるリスクは消えません。過ってインターネットに公開してしまった時の保険のようなものでしょうか。
allow (許可) とdeny (拒否) とorder (見る順序指定等) を書き換えます。デフォルトではすべてのアクセスを許可してます (拒否がありません)。
デフォルト
Order allow,deny
Allow from all
すべてを拒否してから、自分自身 (localhost) だけ許可します。
Order deny,allow Deny from all Allow from 127.0.0.1
加えて、LAN内 (192.168.*.*) からを許可するなら。
Order deny,allow
Deny from all
Allow from 127.0.0.1 192.168
Web共有のルートディレクトリのアクセス制限をするには、/etc/httpd/httpd.conf を書き換える必要があります。
Basic認証やダイジェスト認証の設定までするなら、「Mac OS XでWebDAVサーバ」の中の記述が参考になるでしょう。
OS X 10.1と10.2にはApache用のPHP4のモジュールも入っています。あとは使えるように設定するだけ。
まず、/etc/httpd/httpd.confファイルの次の2行の頭の「#」を消してコメントでなくします。
#LoadModule php4_module libexec/httpd/libphp4.so #AddModule mod_php4.c
次に、10.1では下記を探して#を取るだけ。10.2のhttpd.confには書いてないので自分で記述します。
(850行目辺りのAddType application/x-tar .tgzの下に書くと分かりやすい)
#AddType application/x-httpd-php .php #AddType application/x-httpd-php-source .phps
あとはApacheの再起動。これだけで使えます。書き換え方法はname.confの時と同じですね。
OS X10.2にはRubyも入りました。CGIとして実行するだけなら、Perlと同じくApacheの設定をして「#!/usr/bin/ruby」と1行目に書くだけです。そのパスを変えるのもPerlと同じ。
お世話になりました。ありがとうございます。