七行プログラミング (452レス)
1-

190: 128 03/12/04 03:32 ID:h3ZU5uFM(2/2) AAS
オオボケでした。
開発中のを送ってしまった。

こっちです。

use CGI":all";charset$c=Shift_JIS;*i=*param;*x=*textfield;sub l{a{href,pop},pop
}sub e{escapeHTML i pop}chdir G;$b=e(B)||e S;open F,"+>>$b";flock F,2;[<F>];$t=
'スレッド';s!\w+外部リンク:.+$!l$&,$&!emg,s/\n/br/eg,print F dt($.+1,':'.b(l e(N)||'七氏',
'mailto:'.e M),':'.gmtime),dd($_),"\n"if$_=e T;seek F,0,0;put header,start_html
(-title=>$b||$t,encoding,$c,lang,ja),startform,h1($b||$t),$b?dl(<F>).hidden(B,
$b).l $t,'?':ol(li[map{l$_,"?B=$_"}sort{-M$a<=>-M$b}<*>]).$t.x(S),br,submit,
Name,x(N),Mail,x(M),br,textarea(T,'',7,80,1),endform,end_html
191: 03/12/04 06:04 ID:??? AAS
>>189
> charset()を使わないと、escapeHTMLで文字化け
あぁ、確かに ad hoc な事やってますな…。相変わらず CGI.pm はダサい。:<

#!/usr/bin/perl
use CGI":all";charset$c=Shift_JIS;*i=*param;*x=*textfield;sub l{a{href,pop},pop
}sub e{escapeHTML i pop}sub r{seek F,0,0}chdir G;($b=e(B)||e S)=~m![./]!&¨
open F,"+>>$b";flock F,2;r;[<F>];s!\w+外部リンク:.+!l$&,$&!eg,s/\n/br/eg,print F dt($.+
1,':'.b(l e(N)||'七氏','mailto:'.e M),':'.localtime),dd($_),"\n"if$_=e T;r;$t=
'スレ';put header,start_html(-title=>$b||$t,encoding,$c,lang,ja),startform,$b?h1(
$b).dl(<F>).hidden(B,$b).l $t,'?':ol(li[map{l$_,"?B=$_"}sort{-M$a<=>-M$b}<*>]).
$t.x(S),br,submit,Name,x(N),Mail,x(M),br,textarea(T,'',7,80,1),endform,end_html

・レス番号が増えないのを fix 。
・スレタイに [./] は使用不可 (「../7thread.cgi」なんてスレ立てられると…) 。
・gmtime は流石にどうかと思う。
・上記改造のしわ寄せを h1 周りに。
192: 03/12/04 21:36 ID:b7RTKokI(1) AAS
7thread 差分
< *i=*param
< sub e{escape i pop}
> sub e{escape param pop}
> -title=>$b=($t='スレ')

>186 thx URL
なるほど、close省略出来たんだ。
FileHandle にはスコープは関係なかったね。IO::Fileと勘違いしてた。

blosxom ... 残り1行じゃFlavourは無理かなぁ
193
(2): 128 03/12/05 03:38 ID:2kvaGCEL(1) AAS
乙カレーっす。

7thread ログの形式を変えてみました。
今までのログは利用できません。

あと__DATA__以降にスタイルシートを指定できるようにしました。

#!/usr/bin/perl
use CGI":all";charset$c=Shift_JIS;*i=*param;*x=*textfield;sub l{a{href,pop},pop
}sub e($){escapeHTML i pop}chdir G;($F=e B||e S)=~m![./]!?die:open F,">>$F";$t=
'スレ';$d=e N||'七氏';flock F,2;s!\w+外部リンク:.+!l$&,$&!eg,s/\n/br/eg,print F li(b(e M?
l$d,'mailto:'.e M:$d),localtime.p$_)if$_=e T;open F;$/='';put header,start_html
(-title=>$F||$t,-style=><DATAencoding,$c,lang,ja),startform,h1($F||$t),$F?ol(
<F>).hidden(B,$F).l $t,'?':ol(li[map{l$_,"?B=$_"}sort{-M$a<=>-M$b}<*>]).$t.x(S)
,br,submit,Name,x(N),Mail,x(M),br,textarea(T,'',7,80,1),endform,end_html

__DATA__
h1{color:red; font-size:140%;}
p {margin:0; padding:0.5em; background:#EEF;}
194
(2): 03/12/05 06:41 ID:1VQJofzV(1) AAS
sage機能実装。大幅に機能削ってしまったのでbranch.
marge よろしく;-]

use CGI":all";charset$c='EUC-JP';sub l{a{href,pop},pop}chdir G;sub e{escapeHTML
param pop}$d=e(N)||'七氏';($F=e B)=~/[.\/]/?die:($u=($m=e M)=~/sage/?(stat($F))
[9]:0),open F,">>$F";flock F,2;s!\w+外部リンク:.+!l$&,$&!eg,s/\n/br/eg,print F li(b($m?
l$d,'mailto:'.$m:$d),localtime.p$_)if$_=e T;$t='スレ';open F;$/='';*x=*textfield;
put header,start_html($F||$t),startform,h1($F||$t),$F?ol(<F>).hidden(B,$F).l$t,
'?':ol(li[map{l$_,"?B=$_"}sort{-M$a<=>-M$b}<*>]).$t.x(B),br,submit,Name,x(N),
Mail,x(M),br,textarea(T,'',7,80,1),endform,end_html;$u&&utime time,$u,$F
195
(1): 03/12/05 06:41 ID:??? AAS
>>193
一引数の open で開き直すのはナイスですな。

start_html に -style を指定すると、外部 CSS への link 要素を吐く
(少なくとも CGI.pm 3.00 では) 。ので、style 要素に変更。

#!/usr/bin/perl
use CGI":all";sub l{a{href,pop},pop}sub e($){escapeHTML param pop}($C,$B,$S,$D)
=<DATA>;charset$C;chdir G;($F=e B||e S)=~m![./]!?die:open F,">>$F";flock F,2;s!
\w+外部リンク:.+!l$&,$&!egx,s/\n/br/eg,print F li(b(e M?l e N||$D,'mailto:'.e M:e N||$D
),localtime.p$_)if$_=e T;*x=*textfield;open F;put header,start_html(-title=>$F
||$B,encoding,$C,lang,ja),style($S),startform,h1($F||$B),$F?ol(<F>).hidden(B,$F
).l Threads,'?':ol(li[map{l$_,"?B=$_"}sort{-M$a<=>-M$b}<*>]).NewThread.x(S),br,
submit,Name,x(N),Mail,x(M),br,textarea(T,'',7,80,1),endform,end_html

__DATA__
Shift_JIS
7ch
h1{color:red; font-size:140%;} p {margin:0; padding:0.5em; background:#EEF;}
七氏
196: 195 03/12/05 06:42 ID:??? AAS
>>194
むぅ。(w
197
(1): 03/12/05 07:03 ID:??? AAS
>193
お疲れ様。取り急ぎ、動作報告します。
Perl5.8.2/CGI.pm3.00, Perl5.6.1/CGI.pm2.752で確認しました。

-style=<DATA> は、CGIpm/3.00ではlinkのhref属性に入ってしまう。
引数の型によってlink, styleの出力を区別してるらしい。see _style method in CGI.pm

古いバージョンのCGI.pmではxmlのencoding属性の指定は出来ない。
<body encoding="..." となるので特に影響はないけど。
198: 03/12/05 13:00 ID:??? AAS
>>194
*本当に下がる* sage 機能、無理矢理 merge 。:p
URL auto link が犠牲に。

#!/usr/bin/perl
use CGI":all";sub l{a{href,pop},pop}sub e($){escapeHTML param pop}($C,$B,$D,@S)
=<DATA>;charset$C;chdir G;($F=e B||e S)=~m![./]!?die:open F,">>$F";flock F,2;$s
=($m=e M)=~/sage/;*x=*textfield;s/\n/br/eg,print F li(b($m?l e N||$D,'mailto:'.
$m:e N||$D),localtime.p$_)if$_=e T;close F;$s&&utime 1,1,$F;open F;put header,
start_html(-title=>$F||$B,encoding,$C,lang,ja),style(@S),startform,h1($F||$B),
$F?ol(<F>).hidden(B,$F).l Top,'?':ol(li[map{l$_,"?B=$_"}sort{-M$a<=>-M$b}<*>]).
New.x(S),br,submit,Name,x(N),Mail,x(M),textarea(T,'',7,80,1),endform,end_html

__DATA__
Shift_JIS
7ch
七氏
h1 {color:red; font-size:140%;}
p {margin:0em; padding:0.5em; background:#EEF;}

utime は FreeBSD だとファイル閉じないと効かなかったです。
Win98SE だと開いたままいぢれたけど。
199: 128 03/12/05 18:07 ID:??? AAS
皆様。乙!
sage 機能いいですねぇ。

>>197
チェックありがとっす!
-style ってバージョンによって違ったんですね。
2.98でも確認できました。

修正版です。$/の定義はズルしてます。(w

#!/usr/bin/perl
use CGI":all";charset$c=Shift_JIS;*x=*textfield;sub l{a{href,pop},pop}sub e($){
escapeHTML param pop}chdir G;($F=e B||e S)=~m![./]!?die:open F,">>$F";$t=Thread
;$d=e N||NoName;flock F,2;s!.+外部リンク:.+!l$&,$&!eg,s/\n/br/eg,print F li(b(e M?l$d,'
mailto:'.e M:$d),localtime.p$_)if$_=e T;open F;put$/=header,start_html(-style=>
{code=><DATA>},title=>$f=$F||"7$t",lang,ja,encoding,$c),startform,h1($f),$F?ol(
<F>).hidden(B,$F).l$t.List,'?':ol(li[map{l$_,"?B=$_"}sort{-M$a<=>-M$b}<*>]).New
.$t.x(S),div(submit,Name,x(N),Mail,x(M)),textarea(T,'',7,80,1),endform,end_html
__DATA__
h1{color:red; font-size:140%;}
p {margin:0; padding:0.5em; background:#EEF;}
b {color:green;}
a:hover{background:#FCC;}
input,textarea{margin:0 10px 0 2px;}
200
(6): 03/12/05 22:30 ID:??? AAS
マ板から誘導されました。
既出と承知しつつ、1行掲示板です。
一応、名前と本文両方がないとはじく機能と、投稿日付つき。
(4行目の $t[4]/$t[3] を $t[2]:$t[1] にすれば、手動リロードの
簡易チャットにもなります。名前毎回入れるの面倒だけど。笑)
ファイル名は lb.cgi、パーミッション755で置けばいきなり稼動可能です。

#!/usr/bin/perl
$l='log.dat';@t=localtime();$t[4]++;use CGI;$q=new CGI;$d=$q->param('n');
$e=$q->param('h');($d&&$e)and &g;&p;exit;sub g{&i;open F,">$l";flock(F,2);print
F "$t[4]/$t[3]:$d<BR>$e<HR>\n",@b;close F;}sub p{&i;print"Content-Type:text/h"
,"tml\n\n一行掲示板<FORM METHOD=POST ACTION=\"lb.cgi\" NAME=1>名前<INPUT TYPE="
,"TEXT SIZE=20 NAME=n><BR>本文<INPUT TYPE=TEXT SIZE=60 NAME=h><BR><INPUT TYPE="
,"SUBMIT VALUE=\"送信\"></FORM><HR>",@b;}sub i{open F,"$l";@b=<F>;close F;}
201
(2): 03/12/06 00:29 ID:??? AAS
>>200
特にヒネりもなく縮め。

#!/usr/bin/perl
use CGI":all";*P=*param;-e($F='log.dat')||open F,">$F";if(P(n)&&P(h)){open F,
"+<$F";flock F,2;@b=<F>;@t=localtime;seek F,0,0;print F++$t[4],"/$t[3]:",P(n),
'<BR>',P(h),"<HR>\n",@b}open F;$I='<INPUT TYPE';print"Content-Type: text/html\n
一行掲示板<FORM METHOD=POST ACTION=\"$0\">名前$I=TEXT SIZE=20 NAME=n><BR>本文",
"$I=TEXT SIZE=60 NAME=h><BR>$I=SUBMIT VALUE=\"送信\"></FORM><HR>",<F>

過去の作品に出てくるテクや Perl の言語仕様をしっかり研究してから
次回作を作って見せて欲しいな。

ところで 7blosxom と 7thread と 7ch (>>128〜) 、参加作という事で
外部リンク:cm.xrea.cc に載せていいですか? >オリジナル作者各位
と言っても実際に載せるのは年越してからになると思いますが(苦)。
202
(1): 03/12/06 17:16 ID:??? AAS
スレ汚し失礼。簡易telneted。ポート1029を使います。
use Socket;socket(SERVER,2,1,getprotobyname('tcp'));setsockopt(SERVER,
SOL_SOCKET,4,1);bind(SERVER,pack_sockaddr_in(1029,INADDR_ANY));listen(
SERVER,1);select(SERVER);$|=1;for(;;){accept(CLIENT,SERVER)
;select(CLIENT);$|=1;$cmd;print '$ ';while($c=getc(CLIENT)){if($c=~/\n$/){
print `$cmd`,"\n",'$ ';$cmd = '';}else{print $c;$cmd .= $c;}}close CLIENT}
203: 128 03/12/07 00:41 ID:??? AAS
>>201
7ch と 7thread のオリジナル作者です。
どうぞ載せてくださいませ。
204: 03/12/07 03:57 ID:enSfwhvY(1/3) AAS
>201
参加してたんだw。どぉも。一年ぶりです。
<- 7blosxomのプロトタイプ提供者(===7wiki)です。

> 外部リンク:cm.xrea.cc に載せていいですか?
他にも幾つかストックあるので、公開時には掲載よろしくお願いします。m(_ _)m
205: 7uploader 03/12/07 09:25 ID:enSfwhvY(2/3) AAS
もっと詰めてからにしようと思ったけど、とりあえず公開します。後はよろしく:)

#!/usr/bin/perl
use CGI':all';$CGI::POST_MAX=1024*1000;chdir D;if($u=upload u){open F,">./$u"or
die;binmode F;while(read$u,$b,1024){print F$b}close F}@f=sort{-M$a<=>-M$b}<*>;(
($_=param d)&&grep/^$_$/,@f)?do{open F,$_;put header(-Content_length=>-s,
attachment=>$_,-type=>"application/octet-stream"),<F>}:do{put header,start_html
,start_multipart_form,filefield(u),submit,endform,hr,table({-border=>1},Tr[th([
qw/name size date/]),map{td([a({href,"?d=$_"},$_),-s,''.localtime((stat)[9])])}
@f]),end_html}

__END__
TODO
[ ] 保存するファイル名のチェック。 uploadされたphpやshtmlが実行されるのを防止,や../等の対策。
[*] 出力するファイル名のチェック。
[ ] binary ファイルの取扱。(for windows)
[ ] 他のブラウザへの対応。
206: 03/12/07 09:39 ID:??? AAS
>>202
term 関係はシステム依存度高くて鬼門でごわす。

#!/usr/bin/perl
use Socket;socket S,2,1,getprotobyname"tcp";setsockopt S,SOL_SOCKET,4,1;bind S,
sockaddr_in 1029,INADDR_ANY;listen S,1;{accept C,S;binmode C;select C;$|=1;$n=
"\r\n";print$p='$ ';while($_.=$c=getc C){if(s/[$n]+\x00//){/^exit$/&&last;s/\s+
\z//x for@o=`$_`;print join$n,'',@o,$p;$_=''}else{$c=~/[$n]/||print$c}}close C;
redo}

TeraTermPro → Win98SE (command.com) と
TeraTermPro → FreeBSD 4.x (tcsh) で動作する事を確認。
FreeBSD 上で telnet localhost 1029 は動作不能。
誰か残りの行で UNIX 系 OS 用のコード組み込んで下さい。:o)
207
(1): 03/12/07 20:49 ID:enSfwhvY(3/3) AAS
Socket関連も、環境に依存する定数があったと思う。
後、ls コマンドの実装。

環境
Linux NetKit0.17 telnet で動作確認。(line mode)
> env | grep TERMCAP
TERMCAP=SC|screen|VT 100/ANSI X3.64 virtual terminal:\

use Socket;socket S,PF_INET,SOCK_STREAM,getprotobyname'tcp';setsockopt S,
SOL_SOCKET,SO_REUSEADDR,1;bind S,sockaddr_in 1029,INADDR_ANY;listen S,1;{accept
C,S;binmode C;select C;$|=1;$n="\r\n";print$p='$ ';while($_.=getc C){if(length
==1){s/^[$n\x00]//}elsif(s/[$n]$//){/^exit$/&&last;(/^cd\s*(.*)/)?chdir$1:print
join$n,(map{s/[$n\z]//g;$_}`$_`),$p;$_=''}}close C;redo}

character mode では、local echoが返らなかった。
端末への対応、悪化してたりしたらゴメン(焦
208: 7hoo 03/12/09 13:46 ID:+unlQkjh(1) AAS
PerlHoo(外部リンク:www.webreference.comです。
ディレクトリ型のリンク集。後1行がなかなか縮まらない >_<。

use CGI":all";$_='($p)=path_info=~m|^/*(.+?)/*$|;chdir("./$p")||die;@f=grep-d,
<*>;%F=(Url,U,Title,T);$F=".7hoo";if(@P=Ms/[\r\n]/ /g;$_}Mparam$_}(U,T,D)){open
F,">>$F";print F join"\t",@P,"\n"}put header,start_html,p(join" / ",(A},Home),M
A.($i.="/$_")},$_}split"/",$p),hr,(param 1)?(h2($p),startform(POST,url."/$p"),(
Mtextfield($F{$_},"",40),b$_,br}keys%F),textarea(D,"",3,40,1),br,submit,endform
):(table(Tr Mtd{valign,top},ul li[MA.($p?"/$p":"")."/$_"},$_}grep-d,@f[$_*15..$
_*15+14]]}(0..@f/15)),hr,(open(F,$F)&&M@N=split/\t/;h3(a{href,$N[0]},$N[1]),p$N
[2]}<F>)),hr,p(A."/$p?1=1"},Edit),end_html';s/M/map\{/g;s/A/a\{href,url/g;eval

__END__

リンクを登録すると、登録したカテゴリのディレクトリ内に .7hoo ファイルを生成します。
例: Home / foo / bar だと、./foo/bar/.7hoo に記録される。

データ・ファイルが各ディレクトリ毎に散らばるのでテスト利用の場合は注意してください。
データファイルの掃除にはシェル等から > find ./target_dir -name ".7hoo" -exec rm {} \;
210: 03/12/10 15:33 ID:??? AAS
おつかれ〜
211: 200 03/12/11 21:24 ID:??? AAS
連投でうざかったらすみません。200で作った1行掲示板を
普通の掲示板に変更してみました。

#!/usr/bin/perl
$F='log.dat';$n='board.cgi';use CGI":all";*Q=*param;*f=*textfield;open F;@b[0..
18]=<F>;close F;if(Q(1)&&Q(2)){@t=localtime;$_=Q(2);s/\r\n/\n/g;s/\r|\n/<br>/g;
$a=(Q(3))?a({-href=>'mailto:'.Q(3)},Q(1)):Q(1);$_="[".++$t[4]."/$t[3] $t[2]:".
sprintf("%02d",$t[1])."] $a".br.$_.hr.$/;open F,">$F";flock F,2;print F $_,@b;}
print header(-charset=>Shift_JIS),"*けいじばん*",start_form(post,$n),"おなまえ"
,f(1),br,textarea(2,'',4,26),br,"めーる",f(3),submit('送信'),end_form,hr,$_,@b;

とりあえず、おまじない程度にShift_JIS(NN4対策)、本文が改行可能(Macの
改行コードも対応)、メール欄追加、日付+時間表示などの機能を付加して
ぴったり7行です。

//項目が全部ひらがななのは自サイトで使う用なので。苦笑
212: 200 03/12/11 21:51 ID:??? AAS
それと、2行目の$Fでログファイル名、$nで自ファイル名を変更可能。
3行目の先頭にある18を「最大ログ数にしたい数-2」に変更すれば
最大ログを設定できます。
213
(1): 03/12/12 02:52 ID:??? AAS
● 最低限押さえるべきポイント for Perl
・識別子は全て一文字にする
・演算子の優先順位を把握して冗長な括弧を全て省く
・サブルーチンは頭の方で宣言して routine(); から括弧を省く
・ブロックの最後の文はセミコロンを省略できる ("main" ブロック然り)

● 基本縮めテクニック for Perl
・使用する関数に関してマニュアルを精読する :)
・bare word ([A-Za-z]\w*) を使ってクォートを省く
・長い名前の関数を複数回使うなら別名を作る (*P=*param;)
・特殊変数や暗黙の代入を積極的に使う
・(スカラー|リスト|ブール)コンテキストでの各挙動を意識する

● Tips for Perl
・同名のファイルハンドルを open し直すなら close は要らない (>>186 参照)
・最も短くかける無限ループは "{ ... ;redo}"

● 「使える」Web プログラムを目指す人に
・XSS 脆弱性に配慮する
・文字コードに依存する定数は外部へ追い出す
・「想定外の入力」でどのように誤作動するか確認する
・多機能より堅牢を

Tips を充実させたいところ。
214: 03/12/12 19:15 ID:O0tbE8Vp(1/2) AAS
Gj and thankU>213
僕もTipsをまとめようかなと思ってました。
7行スクリプト向けのTipsと実用的なTipsを混同すると、誤解する人が出てこないかな?
との杞憂もあり。パターン言語で、このTipsはどういった時に使えるとか、
Tipsが使える場合の背景や制約等を細かく書こうと思ってたんだけど。(現在作業中断中
indexだけでも書き出してみるかな。

paddingテクニック for perl
- ファイルハンドルの直前で改行すると 1 byte diet 出来る。(open後等)
- 正規表現内で改行する場合は x を付ける。
- 変数名はprefix($@%)と名前の間にスペース/改行を含んでも良い。

基本縮めテクニック for perl
- and or && || の使い分け。場合によっては前後の()を省略できる。
- コード全体を圧縮 $_='...';s/xxx/zzz/g;eval # 事例: DeCSS, 7Hoo
- There'sMoreThanOneWayToDoIt
既に書かかれたコードに捕らわれず、異なるアプローチで書き起こす事も忘れずに。

Common Tips for perl
- $foo ||= 10; # foo が 空もしくは0 なら 10 を代入。

縮めTips for CGI.pm
- use CGI":all"; で main:: にインポート。
- 別名が付けられている関数は短い方を利用。
-- start_form -> startform, end_form -> endform
- 環境変数を所得する関数が準備されている。
-- $ENV{'PATH_INFO'} -> path_info, referer 等。
- 独自tagを出力する関数を作る。 事例 >>122 7rss.cgi
- 自分自身のURL -> url, self_url
- 他。

大抵の機能はモジュールで提供してくれてるが、VERSIONの違いには注意。
215
(1): PATH_INFO 内での '..' 03/12/12 19:52 ID:O0tbE8Vp(2/2) AAS
>>186 読んで思い出した。
PATH_INFO に .. が現れるのってどういった場合なんでしょう?
親ディレクトリより上を参照出来る危険があるのかなと思ったけど。
QUERY_STRINGからなら勿論チェックが必要ですが。
PATH_INFOの場合CGI自体が呼ばれない様な気がする。

以下のようなリクエストを試してみました

外部リンク:www.example.com
外部リンク:www.example.com
外部リンク[cgi]:www.example.com

bar.cgi/../ とすると、
サーバーは bar.cgi のあるディレクトリの indexを返してくる様なんだけど。
これって、サーバーの実装に依存するのかな?apache,IIS他幾つかのサイトで確認。
流石にDocumentRootより上を参照しようとするとBad Requestになるけど。

今、丁度7行HTTPdを公開しようと調整していたので、自分でも調べるつもりですが
もし、詳しく知ってる方いたらフォローお願いします。m(_ _)m
216
(1): 03/12/13 16:17 ID:??? AAS
ご自由に編集して下さい。(´ω`
外部リンク[cgi]:cm.xrea.cc

#--- 7memo.cgi ---
#!/usr/local/bin/perl
chdir"D";use CGI":all";charset$c='EUC-JP';($_)=path_info=~m|[^/]+|g;s/^\s+|[<>|
]|\s+$//g;tr/\x00-\x1F.\x7F/./;$F=length>2?escape CGI$_:Top;open F,($m=param w)
?">$F":$F;flock F,2;$/='';print F$m||=<F>;sub U($){unescape CGI@_}opendir D,'.'
;put header,start_html(-title=>U$F,lang,ja,encoding,$c),ul(map{li"".localtime((
stat)[9]),a{href,url."/$_"},U$_}sort grep!/^\./,readdir D),h1(U$F),startform(0,
url."/$F"),p(textarea(w,$m,25,70),submit),endform,end_html
__END__

7wiki を参考に色々いぢってみました。
217
(1): 03/12/15 02:27 ID:??? AAS
>>215
/foo%5C..%5C..%5Cbar なんてのをそのまま Win 鯖で食うとヤバいかと。
218
(2): 7memo 03/12/15 13:08 ID:??? AAS
ちょぼちょぼいぢり。

#!/usr/local/bin/perl
use CGI":all";sub d{chomp($_=<DATA>);$_}sub U($){unescape CGI@_}chdir d;charset
$c=d;$s=d;$_=path_info=~m|[^/]+|?$&:d;s/^\s+|\.+|\s+$/./g;$_=escape CGI$_;-d&&
die;open F,($m=param w)?">$_":$_;eval{flock F,2};$/='';print F$m||=<F>;opendir
D,'.';put header,start_html(-title=>U$F,lang,ja,encoding,$c),h1(U$F),startform(
0,url."/$F"),p(textarea(w,$m,20,70),submit$s),endform,ul(map{li"".localtime((
stat)[9]),a{href,url."/$_"},U$_}sort grep!/^\./,readdir D),end_html

__DATA__
data_dir
EUC-JP
save memo
Top Page Title
219: 03/12/15 13:18 ID:??? AAS
>>218
s/\$F/\$_/g; _| ̄|○
1-
あと 233 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ アボンOFF

ぬこの手 ぬこTOP 0.016s