変数名などはあくまで例程度ですが。
if($form{'trip_in'} == m/[^#]/ ){
&error("#(シャープ)が入力されていません。")

if($form{'trip_in'} == "" || length($form{'trip_in'}) < 2 || length($form{'trip_in'}) > 17){
&error("トリップは1byteから16byteの範囲で入力してください。")
}
//lengthが2〜17になっているのは#が必須なため。
//1-16の場合#だけで書き込み成立。また、文字上限数が15文字
//半角英数字は1byte文字 全角かな カナ 漢字は2byte文字 
 (省略)
<form action="$write" method="post">
 (省略)
<input type=hidden name="trip_in" value="$form{'trip_in'}">
 (省略)

どのような動作をしているかに関してはそちらでお願いします。
遣り方はフォームを作る
 ↓
マッチング処理とエラー返却。
 ↓
ログ情報への書き込み指定。

何をしているかどうかはPerlの講座サイトを読めば分かります。
また、そっくりそのままスクリプト内に書き込んでも500エラーが返ってくるだけです。

以上コピペ↑↑↑