【初心者向け】Perl CGIで簡単フォーム作成!データ受信から表示までの基本ステップ
「昔ながらのレンタルサーバーで問い合わせフォームを作りたい」
「Perlを使ってWebからデータを受け取る仕組みを勉強したい」
最近のWeb開発ではPHPやNode.jsなどが人気ですが、多くのレンタルサーバーで標準対応しており、一度設定すれば長年安定して動き続ける「Perl CGI」には、今なお根強いメリットがあります。
一見難しそうに見えるフォーム作成ですが、仕組みはとてもシンプル。「①入力する画面(HTML)」と「②処理するプログラム(Perl)」の2つを用意して連携させるだけです。
今回は、初心者でも迷わず作れる最も基本的な「お問い合わせフォーム(データ受信&表示)」の作成手順を分かりやすく解説します!
全体像:フォームが動く仕組み
CGIのフォームは以下のような流れで処理が行われます。
-
ユーザーがHTMLの画面で文字を入力して「送信」ボタンを押す
-
入力されたデータがPerl(CGIプログラム)に送られる
-
Perlがデータを受け取り、加工して画面に結果を表示する
それでは、具体的なコードを見ながら順番に作っていきましょう。
ステップ1:入力画面(HTMLフォーム)を作る
まずはユーザーが文字を入力する画面を作ります。ファイル名は form.html などにして保存してください。
HTML
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>お問い合わせフォーム</title>
</head>
<body>
<h1>お問い合わせフォーム</h1>
<!-- actionに送信先のPerlファイル、methodにpostを指定 -->
<form action="bbs.cgi" method="post">
<p>
<label for="nickname">お名前:</label><br>
<input type="text" id="nickname" name="nickname">
</p>
<p>
<label for="message">メッセージ:</label><br>
<textarea id="message" name="message" rows="4" cols="40"></textarea>
</p>
<p>
<input type="submit" value="送信する">
</p>
</form>
</body>
</html>
💡 HTMLの重要ポイント
-
<form>タグのaction属性に、次に作るPerlのファイル名(例:bbs.cgi)を正確に指定します。 -
各入力項目の
name="〇〇"(今回はnicknameとmessage)が、Perl側でデータを取り出すための「キー(名前)」になります。ここを書き忘れるとデータが届かないので注意しましょう。
ステップ2:送信先(Perl CGIプログラム)を作る
続いて、HTMLから送られてきたデータを受け取って画面に表示するPerlプログラムを作ります。ファイル名は bbs.cgi にします。
現代のPerlでは、標準で用意されている CGI という便利なモジュールを使うのが最も安全で簡単です。
Perl
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use CGI;
# CGIオブジェクトの作成
my $q = CGI->new;
# HTMLの「name属性」に指定した名前でデータを受け取る
my $nickname = $q->param('nickname');
my $message = $q->param('message');
# 🔒 セキュリティ対策(悪意のあるHTMLタグなどを無効化する)
$nickname = $q->escapeHTML($nickname);
$message = $q->escapeHTML($message);
# 文字化け対策(出力用にエンコード)
use Encode 'encode';
my $html_nickname = encode('utf-8', $nickname);
my $html_message = encode('utf-8', $message);
# サーバーに対して「今からHTMLを出力します」と伝える(ヘッダー出力)
print $q->header(-charset => 'utf-8');
# 画面に表示するHTMLを出力(ヒアドキュメント構文)
print << "END_HTML";
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>受信結果</title>
</head>
<body>
<h1>送信ありがとうございました</h1>
<p>以下の内容で受け付けました。</p>
<hr>
<p><strong>お名前:</strong> $html_nickname</p>
<p><strong>メッセージ:</strong><br> $html_message</p>
<hr>
<p><a href="form.html">戻る</a></p>
</body>
</html>
END_HTML
⚠️ 動かない時のチェックリスト(500エラー対策)
Perl CGIをサーバーにアップロードして「500 Internal Server Error」が出る場合、原因のほとんどはプログラムの文法ではなく、サーバーの設定(環境)にあります。動かない時は以下の3点を確認してください。
① 1行目の「パス」は合っているか?
コードの1行目にある #!/usr/bin/perl は、サーバー内のPerlがどこにあるかを示すものです(シバン行と言います)。
レンタルサーバーによっては #!/usr/local/bin/perl など異なる場合があるため、利用しているサーバーの「仕様」を確認して書き換えてください。
② パーミッション(権限)を「755」にしたか?
FTPソフトなどでサーバーに .cgi ファイルをアップロードした後、ファイルの属性(パーミッション)を 755(または 705)に変更する必要があります。これを忘れると、サーバーがプログラムの実行を拒否してしまいます。
③ 改行コードは「LF」になっているか?
Windowsのメモ帳などでコードを書くと、改行コードが「CRLF」という形式になり、これが原因でエラーになることがあります。Visual Studio Codeなどの高機能エディタを使い、保存時に改行コードを LF に指定して保存・アップロードしてください。
まとめ:ここからさらに機能を追加しよう
今回は、Perl CGIを使ってフォームのデータを受信し、画面に表示する基本を解説しました。
-
HTMLの
<form>のactionとnameを正しく設定する -
Perl側では
CGI->newと$q->param('name名')でデータを受け取る -
セキュリティのために必ず
escapeHTMLを通す
これができれば、フォーム作成の第一歩はクリアです!
この基本形が動いたら、次は「受け取ったデータをファイルに保存する処理」や「管理者にメールで通知する処理」などを付け足していくことで、実用的なお問い合わせフォームや掲示板へと進化させることができます。
ぜひチャレンジしてみてくださいね!
Last Updated on 2026年5月25日3:20 pm by cgishop
こちらもおすすめ
PERL use Data::Dumper;
2022年10月26日
Perl CGIで簡単フォーム作成!データ受信から表示までの基本ステップ
2025年11月28日