#!/usr/local/bin/perl;#  ↑このパスはプロバイダによって違うので調べて設定する;#    (これはこのスクリプトの最初の１行になければならず、それより上に空行があってもいけません。);#    (この設定が必要ないサーバもあります。一般的な場合を想定して解説を入れています。);#    (他に、プロバイダからアナウンスされている情報を十分理解しておいてください。);#;# 簡易ＢＢＳ version 8.8（フリーソフト）;#;# Script written by Kazu.Y;# Created on: 02/05/96;# Last Modified on: 31/JAN/98;# I can be reached at: rescue@ask.ne.jp;# Scripts Found at: http://www.ask.ne.jp/~rescue/;#;# <利用規定の抜粋>;#  1.このスクリプトは自分で使うために承諾なしに自由に改造することができます。;#  2.改造の有無にかかわらず、このスクリプトを再配布することはできません。;#  3.このシステムを有償で他人に設置してあげたりする行為は無断ではできません。############################################################################################# ■重要！ v8シリーズはそれ以前のヴァージョンとデータの互換性がありません。## 基本構成（初期設定はこの構成を前提に解説します）##   public_html（ホームページディレクトリ）#        |#        |-- cgi-bin（任意のディレクトリ）#               |#               |-- jcode.pl (755)#               |-- minibbs.cgi (755)#               |-- minibbs.dat (666)##                   ・minibbs.dat は中身が空っぽのファイルをパソコン上で作成して転送する#                   ・( )内はパーミッッション値#                   ・jcode.plは中身を全くいじらずにそのままアスキー転送する#                   ・jcode.plはjperlでは利用できないので注意すること#                   ・これら３つのファイルはアスキーモードで取り扱う(転送)すること#############################################################################################----------------##    初期設定    ##----------------##--- 必ずあなたの環境に合わせて書き替える項目 --------------------------------------------##◆掲示板の名前#　''内に記述しますが、'を入れたい場合は '' を "" に替えてください.#　ただしその場合、文字によって化けが生じることがあります.#　詳しくは当サイトのＦＡＱを参照してください.$title = 'SKYROAD ＢＢＳ';#◆このスクリプトをＵＲＬで設定$reload = 'http://www.hi-ho.ne.jp/maskins/minibbs.cgi';#◆画面の「終了」リンク先をＵＲＬで設定$modoru = 'http://www.hi-ho.ne.jp/maskins/';#--- 必要に応じて設定する項目 ------------------------------------------------------------##◆画面の色や背景の設定 (HTML書式)$body = '<body bgcolor="#aabbcc">';#◆タイトル背景の設定$title_back = '#ffaaaa';#◆投稿毎に管理者へ内容をメールする#  メール機能は、いち早く不適切な投稿等をチェックすることができるように設計しました.#  メールしない場合は $mailto $sendmail を設定する必要はありません.#  投稿者がＥメールを記入している場合は、返信アドレスにそのＥメールが記載されます.#  メールする:1 しない:0$s_mail = 0;$mailto = 'user@mail.host'; # 送信先Ｅメール$sendmail = '/usr/lib/sendmail'; # 送信スクリプト(sendmail) プロバイダに聞くこと#◆タグを使えるようにするかどうかの設定#  <a gref="リンク"></a>についてはＵＲＬフォームが用意してあるので、いたずらやタグの#  閉じ忘れ等による混乱を避けるためにできるだけ使えないようにしておくことをお勧めします.#  使える:1 使えない:0$tag = 0;#◆タグを使えるようにした場合に拒否する危険にもなるタグの指定 (書式はperl文法書を参照)#　$tag = 0;にした場合はこのままでよい.@kyohi = (	'<table(.|\n)*>',	'<meta(.|\n)*>',	'<pre(.|\n)*>',	'<form(.|\n)*>',	'<embed(.|\n)*>',	'<script(.|\n)*>',	'<frame(.|\n)*>',	'<a(.|\n)*on(.*)=(.|\n)*>',	'<img(.|\n)*on(.*)=(.|\n)*>',	'',	'',	'','');#◆画面内に記述する文字列等 (HTML書式)#　''内に記述しますが、'を入れたい場合は '' を "" に替えてください.#　ただしその場合、文字によって化けが生じることがあります.#　詳しくは当サイトのＦＡＱを参照してください.#　必要ない場合は '' 内に何も書きません.#◇タイトルの下位置に表示する文字列$msg_top1 = '';$msg_top2 = '';$msg_top3 = '';#◇投稿フォームの下位置に表示する文字列$msg_mid1 = '■投稿時には、この記事を削除する時に利用する削除キーを設定してください.<br>';$msg_mid2 = '■一度設定して投稿すれば一定期間同じ削除キーが保存されます.<br>';$msg_mid3 = '■入力欄に記憶された内容を消去するには、[書き直し]→[書き込む]を順番に押します.';#◇最下部に表示する文字列$msg_btm1 = '■削除は、[削除]欄をチェックして、投稿時に設定した削除キーをすぐ上の欄に入力してボタンを押します.<br>';$msg_btm2 = '■削除キーが合致しない記事は削除されません.<br>';$msg_btm3 = '■削除キー欄にマスターキー(管理者のみ)を入力するとすべての記事の削除が可能です.';#◆$reloadで設定した設置ＵＲＬ以外のフォームからの投稿を禁止する処置 する:1 しない:0#　悪戯の防止用ですが、利用サーバやブラウザによっては正規投稿もできなくなる場合もあります.$ref_axs = 0;#◆１記事の最大記録サイズ(bytes) 0で無制限$max_size = 1000;#◆１画面に表示する記事件数$def = 10;#◆書き込み件数の最大登録数の設定です。この件数を超えると、古いものから削除されていきます.#　ページ処理機能が付きましたので、この件数を大きくしても一度に表示される記事数は限定されます.#　記録されたファイルの巨大化を防止する為に、ある程度の件数で自動削除されるようにします.#　サーバ負荷を考慮して、あまり大きくしないことが重要です.$max = '100';#◆日本語コード変換ライブラリ#　minibbs.cgiと同じ場所に設置する場合はこのままでよい.require './jcode.pl';#◆内容が書き込まれる記録ファイルのパスを設定#　minibbs.cgiと同じ場所に設置する場合はこのままでよい.$file = './minibbs.dat';#◆海外サーバ等で時差が生じる場合は修正します#　海外時間に＋９時間する場合　= localtime(time + 9*60*60);#　海外時間に−９時間する場合　= localtime(time - 9*60*60);($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);#◆クッキーの消化設定#　最終書き込みから   30日後 30*24*60*60#　　　　　　　　　　　1日後 24*60*60#　　　　　　　　　 10時間後 10*60*60($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 30*24*60*60);#◆入力形式の設定　標準入力:1(post) その他:0(get)#　投稿ボタンを押して Method not implemented.. 等というエラーが出る場合は get で試すこと#　getの場合は文字制限がありますので長い文章等は途中で切れる可能性があります.#　さらに、getの場合は不要な悪戯を受けてしまう環境になりますので、注意してください.#　POST:1 GET:0$method = 1;############################################################################################# ・minibbs.datを直接編集したい場合は、アスキーモードで取出/転送を行い、通常のエディタ# 　でデータ仕様を守って行ってください. ## ・データ仕様# 　"番号","削除キー","投稿者","Ｅメール","ホスト","投稿日","題名","内容","ＵＲＬ","改行スイッチ"############################################################################################@wday_array = ('日','月','火','水','木','金','土');$date_now = sprintf("%01d月%01d日(%s)%02d時%02d分",$mon +1,$mday,$wday_array[$wday],$hour,$min);$date_num = sprintf("%02d%02d%02d%02d%02d",$mon +1,$mday,$hour,$min,$sec); # <-変更禁止if ($method eq '1' && $ENV{'QUERY_STRING'} ne '') { &error('エラー','不正利用の可能性があります.'); }if ($method eq '1') { $method = 'post'; read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); }else { $method = 'get'; $buffer = $ENV{'QUERY_STRING'}; }@pairs = split(/&/,$buffer);foreach $pair (@pairs) {	($name, $value) = split(/=/, $pair);	$value =~ tr/+/ /;	$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;	&jcode'convert(*value,'sjis');	if ($value =~ /(.*)\"\,\"(.*)/) { &error('記入ミス','記録できない文字の並び「","」があります.'); }	$value =~ s/<!--(.|\n)*-->//g;	if ($tag) {		foreach (@kyohi) {				if (/^$/) { next; }			if ($value =~ /$_/i) { &error('記入ミス','記録できないタグ記述があります.'); }		}	}	else { $value =~ s/</&lt;/g; $value =~ s/>/&gt;/g; }	if ($s_mail && $name eq 'value') {		$mail_value = $value;		if ($mail_value =~ /\r\n/) { $mail_value =~ s/\r//g; }		elsif ($mail_value =~ /\r/) { $mail_value =~ s/\r/\n/g; }	}	if ($FORM{'action'} eq 'regist') {		if ($value =~ /\r\n/) { $value =~ s/\n//g; }		elsif ($value =~ /\n/) { $value =~ s/\n/\r/g; }		if ($FORM{'how'} eq '1') { $value =~ s/\r/<br>\r/g; }	}	if ($name eq 'name' || $name eq 'email') { $value =~ s/\;//g; $value =~ s/\://g; $value =~ s/\,//g; }	if ($name eq 'target') { push(@RM,$value); }	else { $FORM{$name} = $value; }}if (!open(DB,"$file")) { &error('設定ミス',"$file が設定された場所にありません."); }@lines = <DB>;close(DB);$password = shift(@lines);chop($password);($header,$password) = split(/:/,$password);if ($password =~ /^\$1\$/) { $salt = 3; } else { $salt = 0; }if ($FORM{'action'} eq 'password') { &encode; }if (-z $file) { $first = 1; &password; exit; }elsif ($header ne 'MiniBBSv8') { &error('データエラー',"$file のデータ形式はこの簡易ＢＢＳでは使えません."); }$cookies = $ENV{'HTTP_COOKIE'};@pairs = split(/;/,$cookies);foreach $pair (@pairs) {	($name, $value) = split(/=/, $pair);	$name =~ s/ //g;	$DUMMY{$name} = $value;}@pairs = split(/,/,$DUMMY{$reload});foreach $pair (@pairs) {	($name, $value) = split(/:/, $pair);	$COOKIE{$name} = $value;}if ($FORM{'admin'} eq 'change') { &password; exit; }if ($FORM{'action'} eq 'remove') { &remove; }elsif ($FORM{'action'} eq 'regist') { &regist; }&html;exit;sub html {	#--- 入力フォーム画面 --------------------------------#	print "Content-type: text/html\n\n";	print "<html><head><title>$title</title></head>\n";	print "$body\n";	print "<h1>$title</h1>\n";	print "$msg_top1\n";	print "$msg_top2\n";	print "$msg_top3<p>\n";	print "<form method=$method action=\"$reload\">\n";	print "<input type=hidden name=\"action\" value=\"regist\">\n";	print "投稿者 <input type=text name=\"name\" size=20 value=\"$COOKIE{'name'}\" maxlength=19><br>\n";	print "メール <input type=text name=\"email\" size=40 value=\"$COOKIE{'email'}\"><br>\n";	print "題　名 <input type=text name=\"subject\" size=70 maxlength=69><br>\n";	print "内　容 <font size=-1><input type=radio name=\"how\" value=\"1\" checked>自動スペース＆自動改行 ";	print "<input type=radio name=\"how\" value=\"2\">入力した通りに表\示</font><br>\n";	print "　　　 <textarea name=\"value\" rows=5 cols=70></textarea><br>\n";	print "リンク <input type=text name=\"url\" size=70 value=\"http://\"><p>\n";	print "　　　 <input type=submit value=\"     書き込む     \"><input type=reset value=\"書き直し\">  ";	print "削除キー <input type=password name=\"pwd\" size=10 value=\"$COOKIE{'pwd'}\"> <font size=-1>(記事削除時に使用)</font></form><p>";	print "$msg_mid1\n";	print "$msg_mid2\n";	print "$msg_mid3<p>\n";	#--- 記録記事の出力 ----------------------------------#	@lines = reverse(@lines);	if ($FORM{'page'} eq '') { $page = 0; } else { $page = $FORM{'page'}; }	$page_end = $page + $def - 1;	if ($page_end > $#lines) { $page_end = $#lines; }	print "<form method=$method action=\"$reload\">\n";	print "<input type=hidden name=\"action\" value=\"remove\">\n";	foreach ($page .. $page_end) {		if ($lines[$_] =~ /^\"(\d+)\"\,\"(.*)\"\,\"(.*)\"\,\"(.*)\"\,\"(.*)\"\,\"(.*)\"\,\"(.*)\"\,\"(.*)\"\,\"(.*)\",\"(.*)\"/) {			$number = $1;			$pwd = $2;			$name = $3;			$email = $4;			$host = $5;			$date = $6;			$subject = $7;			$value = $8;			$url = $9;			$how = $10;			print "<hr size=5><p>\n";			print "<table width=100% border=0><tr><td bgcolor=$title_back><font size=+2><b>$subject</b></font></td></tr></table>\n";			print "<i><b>投稿日</b> $date ";			if ($email) { print "<b>投稿者</b> <a href=\"mailto:$email\">$name</a> [$host]  "; } else { print "投稿者 $name [$host]  "; }			print "<input type=checkbox name=\"target\" value=\"$number\">削除<p></i>\n";			print "<blockquote><font size=+1>\n";			if ($how == 1) { print "$value<p>\n"; }			else { print "<pre>$value</pre><p>\n"; }			if ($url) { print "<a href=\"$url\" target=\"_top\">$url</a><p>\n"; }			print "</font></blockquote>\n";		}	}	#--- 改ページ処理 ------------------------------------#	$page_next = $page_end + 1;	$i = $page + 1; $j = $page_end + 1;	print "<hr><p><table border=1 cellpadding=2 cellspacing=2><tr>\n";	print "<td>削除キー <input type=password name=\"pwd\" size=10 value=\"$COOKIE{'pwd'}\"> ";	print "<input type=submit value=\"削除\"></td></form>\n";	if ($#lines >= 0) {		if ($page_end ne $#lines) {			print "<td>新着順 $i \- $j</td>\n";			print "<form method=$method action=\"$reload\">\n";			print "<input type=hidden name=\"page\" value=\"$page_next\">\n";			print "<td><input type=submit value=\"次のページ\"></td></form>\n";		}		else { print "<td>新着順 $i \-&gt; 最後</td>\n"; }	}	print "<td>最大記録件数 $max</td>\n";	print "<th><font size=+1><a href=\"$modoru\" target=\"_top\">終了</a></font></th>\n";	print "</tr></table><p>\n\n";	print "$msg_btm1\n";	print "$msg_btm2\n";	print "$msg_btm3<p>\n";	print "<table border=1 cellpadding=2 cellspacing=2><tr>\n";	print "<form method=$method action=\"$reload\">\n";	print "<input type=hidden name=\"admin\" value=\"change\">";	print "<td><input type=submit value=\"マスターキー変更\"></td></form>\n";	print "</tr></table><p>\n\n";	# このスクリプトの著作権表示（かならず表示してください）	print "<h4 align=right><a href=\"http://www.ask.ne.jp/~rescue/\" target=\"_top\">MiniBBS v8.8</a> is Free.</h4>\n";	print "</body></html>\n";}sub regist {	if ($ref_axs) {		$ref = $ENV{'HTTP_REFERER'};		$ref_url = $reload; $ref_url =~ s/\~/.*/g;		if (!($ref =~ /$ref_url/i)) { &error('利用不可',"「$reload」以外からの投稿は受け付けられません."); }	}	if ($FORM{'name'} eq '') { &error('入力ミス','投稿者を記入してください.'); }	$FORM{'name'} =~ s/</&lt;/g; $FORM{'name'} =~ s/>/&gt;/g;	if ($FORM{'email'} ne '' && !($FORM{'email'} =~ /(.*)\@(.*)\.(.*)/)) { &error('入力ミス','メールアドレスの形式が間違っています.'); }	$FORM{'email'} =~ s/</&lt;/g; $FORM{'email'} =~ s/>/&gt;/g;	if ($FORM{'pwd'} eq '' || $FORM{'pwd'} =~ /\W/ || length($FORM{'pwd'}) > 10) { &error('入力ミス','ボタンの右側にある削除キー欄に10文字以内の半角英数字で記入してください.<br>これは記事の削除時に利用するものです.'); }	if ($FORM{'subject'} eq '' && $FORM{'value'} eq '') {		$COOKIE{'name'} = '';		$COOKIE{'email'} = '';		$COOKIE{'pwd'} = '';		&cookie; 		print "Set-Cookie: $reload=\n";		&html;		exit;	}	if ($FORM{'subject'} eq '') { &error('入力ミス','題名を記入してください.'); }	$FORM{'subject'} =~ s/</&lt;/g; $FORM{'subject'} =~ s/>/&gt;/g;	if ($FORM{'value'} eq '') { &error('入力ミス','内容を記入してください.'); }	if ($max_size) {		$value_size = length($FORM{'value'});		if ($value_size > $max_size) { &error('入力ミス',"最大記録サイズ$max_sizeを超えています. 現在$value_sizeサイズです."); }	}	if ($FORM{'url'} ne '' && !($FORM{'url'} =~ m#(.*)tp(.*)://#)) { &error('入力ミス','ＵＲＬを正しく記入してください.'); }	if ($FORM{'url'} =~ m#^(.*)tp(.*)://$#) { $FORM{'url'} = ''; }	&cookie;	$cook="name\:$FORM{'name'}\,email\:$FORM{'email'}\,pwd\:$FORM{'pwd'}";	print "Set-Cookie: $reload=$cook; expires=$date_gmt\n";	#-- リムネット専用ホスト取得ルーチンの入れ替え位置 : ここから --#	$host = $ENV{'REMOTE_HOST'};	$addr = $ENV{'REMOTE_ADDR'};	if ($host eq $addr) { $host = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr; }	#-- リムネット専用ホスト取得ルーチンの入れ替え位置 : ここまで --#	if (!open(DB,"$file")) { &error('設定ミス',"$file が見つかりません. 設定を確認してください."); }	@lines = <DB>; $password = shift(@lines);	close(DB);	&encode2($FORM{'pwd'});	if ($max <= $#lines + 1) { shift(@lines); }	push(@lines,"\"$date_num\"\,\"$pwd\"\,\"$FORM{'name'}\"\,\"$FORM{'email'}\"\,\"$host\"\,\"$date_now\"\,\"$FORM{'subject'}\"\,\"$FORM{'value'}\"\,\"$FORM{'url'}\"\,\"$FORM{'how'}\"\n");	if (!open(DB,">$file")) { &error('設定ミス',"$file へ書き込みできません. パーミッションを確認してください."); }	print DB $password;	print DB @lines;	close(DB);	$COOKIE{'name'} = $FORM{'name'};	$COOKIE{'email'} = $FORM{'email'};	$COOKIE{'pwd'} = $FORM{'pwd'};	if ($s_mail) { &e_mail; }}sub cookie {	if ($yearg < 10)  { $yearg = "0$yearg"; }	if ($secg < 10)   { $secg  = "0$secg";  }	if ($ming < 10)   { $ming  = "0$ming";  }	if ($hourg < 10)  { $hourg = "0$hourg"; }	if ($mdayg < 10)  { $mdayg = "0$mdayg"; }	$y0="Sunday"; $y1="Monday"; $y2="Tuesday"; $y3="Wednesday"; $y4="Thursday"; $y5="Friday"; $y6="Saturday";	$youbi = ($y0,$y1,$y2,$y3,$y4,$y5,$y6) [$wdayg];	$m0="Jan"; $m1="Feb"; $m2="Mar"; $m3="Apr"; $m4="May"; $m5="Jun";	$m6="Jul"; $m7="Aug"; $m8="Sep"; $m9="Oct"; $m10="Nov"; $m11="Dec";	$month = ($m0,$m1,$m2,$m3,$m4,$m5,$m6,$m7,$m8,$m9,$m10,$m11) [$mong];	$date_gmt = "$youbi, $mdayg\-$month\-$yearg $hourg:$ming:$secg GMT";}sub error {	print "Content-type: text/html\n\n";        print "<html><head><title>$title</title></head>\n";        print "$body\n";        print "<h1>$_[0]</h1>\n";	print "<h3>$_[1]</h3>\n";	print "ブラウザの[戻る]ボタンを押して前の画面に移動してください.<p>\n";        print "</body></html>\n";        exit;}sub remove {	$target = join('|',@RM);	if (crypt($FORM{'pwd'}, substr($password,$salt,2)) eq $password) { $admin = 1; }	foreach $line (@lines) {		if ($line =~ /^\"(\d+)\"\,\"(.*)\"\,\"(.*)\"\,\"(.*)\"\,\"(.*)\"\,\"(.*)\"\,\"(.*)\"\,\"(.*)\"\,\"(.*)\",\"(.*)\"/) {			$number = $1;			$pwd = $2;			if ($number =~ /$target/) {				if (!$admin && crypt($FORM{'pwd'}, substr($pwd,$salt,2)) ne $pwd) { push(@NEW,$line);}			}			else { push(@NEW,$line); }		}	}	if (!open(DB,">$file")) { &error('設定ミス',"$file へ書き込みできません. パーミッションを確認してください."); }	print DB "MiniBBSv8\:$password\n";	print DB @NEW;	close(DB);	@lines = @NEW;}sub password {	print "Content-type: text/html\n\n";	print "<html><head><title>$title</title></head>\n";	print "$body\n";	print "<h1>マスターキーの設定/変更</h1>\n";	if ($first && $message eq '') { print "記事を削除するための管理パスワードを登録します。<p>\n"; }	else { print "$message<p>\n"; }	print "<form method=$method action=\"$reload\">\n";	print "<input type=hidden name=\"action\" value=\"password\">\n";	if (!$first) { print "旧パスワード <input type=password name=\"password_old\" size=10><br>\n"; }	print "新パスワード <input type=password name=\"pwd\" size=10><br>\n";	print "新パスワード <input type=password name=\"pwd2\" size=10>（確認のためもう一度）<p>\n";	print "<input type=submit value=\"     登録     \"></form><p>\n";	print "</body></html>\n";}sub encode {	if ($header eq 'MiniBBSv8') { if (crypt($FORM{'password_old'}, substr($password,$salt,2)) ne $password) { $message = '旧パスワードが認証されませんでした.'; &password; exit; }}	else {		if (!open(DB,"$file")) { &error('設定ミス',"$file が見つかりません. 設定を確認してください."); }		@lines = <DB>;		close(DB);	}	if ($FORM{'pwd'} =~ /\W/ || $FORM{'pwd'} eq '') { $message = '新パスワードに英数字以外の文字が含まれているか空欄です.'; &password; exit; }	if ($FORM{'pwd'} ne $FORM{'pwd2'}) { $message = '確認のために入力された新パスワードが一致しません.'; &password; exit; }	&encode2($FORM{'pwd'});	if (!open(DB,">$file")) { &error('設定ミス',"$file へ書き込みできません. パーミッションを確認してください."); }	print DB "MiniBBSv8\:$pwd\n";	print DB @lines;	close(DB);	&html; exit;}sub encode2 {	$now = time;	($p1, $p2) = unpack("C2", $now);	$wk = $now / (60*60*24*7) + $p1 + $p2 - 8;	@saltset = ('a'..'z','A'..'Z','0'..'9','.','/');	$nsalt = $saltset[$wk % 64] . $saltset[$now % 64];	if (!eval '$pwd = crypt($_[0], $nsalt);') { &error('エラー','暗号処理コマンドが使えませんので設置できません.'); }}sub e_mail {	# 管理者に投稿をメールする	if (!open(OUT,"| $sendmail $mailto")) { return; }	print OUT "To: $mailto\n";	if ($FORM{'email'} ne '') { print OUT "From: $FORM{'email'}\n"; }	else { print OUT "From: $mailto\n"; }	$subject = "[$title] 新着情報";	&jis("Subject: $subject"); print OUT "$msg\n";	print OUT "Content-Transfer-Encoding: 7bit\n";	print OUT 'Content-Type: text/plain; charset=iso-2022-jp' . "\n\n\n";	&jis("投稿者: $FORM{'name'}"); print OUT "$msg\n";	&jis("Ｅメール: $FORM{'email'}"); print OUT "$msg\n";	&jis("題名: $FORM{'subject'}"); print OUT "$msg\n";	&jis("\n$mail_value"); print OUT "$msg\n\n";	&jis("ＵＲＬ記入欄: $FORM{'url'}"); print OUT "$msg\n";	close(OUT);}sub jis { $msg = $_[0]; &jcode'convert(*msg, 'jis'); }__END__