七行プログラミング (452レス)
上下前次1-新
77: nobodyさん [sage] 02/11/25 06:28 ID:??? AAS
 余った行で僅かばかり実用的にしてみる。 
  
 #!/usr/local/bin/perl -w 
 use CGI qw(:all escapeHTML);use DB_File;$j=$ENV{QUERY_STRING}||'FrontPage';($f) 
 =$0=~m|([^/]+)(\.cgi)$|;open(L,'+<&='.($d=tie%D,'DB_File',$f,O_CREAT|O_RDWR or 
 die)->fd)||die;eval{flock L,2};$_=escapeHTML($m=$D{$j}=param('m')||$D{$j});$d-> 
 sync;$d=untie%D;s/\b(([A-Z][a-z]+){2,})/a{href=>"$f.cgi?$1"},$1/ge;s/\x0d\x0a| 
 \x0d|\x0a/<br>/gx;put header,title("$f - $j"),startform('post',"$f.cgi?$j"), 
 submit,b($j),br,textarea('m',$m,6,60),endform,hr,$_ 
  
 陽に輸入してやらないと上のタイミングで escapeHTML 使えなかったよ。 
 (FreeBSD 4.7R, Perl 5.005_03, CGI.pm 2.89) 
78(1): nobodyさん [sage] 02/11/25 23:38 ID:??? AAS
 #! perl 
 use CGI':all';$w='\b(([A-Z][a-z]+){2,})';($p)=($ENV{QUERY_STRING}||'FrontPage') 
 =~/$w/;$f='7wiki.cgi';$o=-f$p?'<':'>';open F,"+$o$p"or die;eval{flock F,2};read 
 F,$m,-s$p;$_=escapeHTML($m=param('m')||$m);seek F,0,0;print F $m;close F;$_.=hr 
 .ul map{li"".localtime time-86400*-M," $_"}sort{-M$a<=>-M$b}grep{/^$w$/}glob"*" 
 ;s/$w/a{href=>"$f?$1"},$1/ge;put header,start_html($p),h1($p),startform('post', 
 "$f?$p"),textarea('m',$m,6,60),br,submit,endform,hr,pre($_),end_html 
  
 一覧を付けてみた・・・(残り:1行と10字 
  
 :all tag で全部輸入できなかった?:html2 とかでも無理かな? 
79(1): nobodyさん [sage] 02/11/26 00:26 ID:??? AAS
 < $_=escapeHTML($m=param('m')||$m);seek F,0,0;print F $m; 
 > $_=escapeHTML $m=param('m')||$m;seek F,0,0;print F$m; 
80(2): nobodyさん [sage] 02/11/26 00:30 ID:??? AAS
 < .ul map{li"".localtime time-86400*-M," $_"}sort{-M$a<=>-M$b}grep{/^$w$/}glob"*" 
 > .ul map{li"".localtime time-86400*-M,$_}sort{-M$a<=>-M$b}grep{/^$w$/}glob"*" 
81: 74 [sage] 02/11/26 00:51 ID:??? AAS
 >>7575(1): nobodyさん [sage] 02/11/24 17:47 ID:??? AAS
 use Fcntl; O_CREAT|O_RDWR を纏めて 286(tie の引数 
  
 定数部分は環境依存するかも知れないので 
 /usr/include/sys/fcntl.h を参照 
勉強になりました。 
82: nobodyさん [sage] 02/11/26 01:21 ID:??? AAS
 use CGI':all';$w='\b(([A-Z][a-z]+){2,})';($p)=($ENV{QUERY_STRING}||FrontPage)=~ 
 /$w/;$f=script_name;open(F,'+'.(-f$p?'<':'>').$p)||die;eval{flock F,2};read F,$ 
 m,-s$p;$_=escapeHTML$m=param(z)||$m;seek F,0,0;print F$m;close F;$_.=hr.ul map{ 
 li"".localtime time-86400*-M,$_}sort{-M$a<=>-M$b}grep{/$w$/}glob'*';s/$w/a{href 
 =>"$f?$1"},$1/ge;put header,start_html($p),h1($p),startform(0,"$f?$p"),textarea 
 (z,$m,6,60),br,submit,endform,hr,pre($_),end_html 
83: nobodyさん [sage] 02/11/26 04:49 ID:??? AAS
 >>78 
 ごめん、CGI.pm 2.89 置いたパスを use lib し忘れたままテストしてた。 
 5.005_03 同梱のは 2.46 で、この辺だと escapeHTML はどのタグにも 
 含まれてない。submit() を呼んだ時点で main に定義されるのかな。 
  
 #! perl 
 use CGI':all';$f=script_name;$w='\b(([A-Z][a-z]+){2,})';($p)=($ENV{QUERY_STRING 
 }||FrontPage)=~/$w/;open(F,-f$p?"+<$p":"+>$p")||die;eval{flock F,2};$/=();$_= 
 escapeHTML$m=param(z)||<F>;truncate F,0;seek F,0,0;print F$m;close F;$_=join hr 
 ,endform,pre($_),ul map{li localtime((stat$_)[9])." $_"}sort{-M$a<=>-M$b}grep 
 /$w$/,<*>;s/$w/a{href=>"$f?$1"},$1/eg;put header,start_html($p),startform(0, 
 "$f?$p"),h1($p),textarea(z,$m,6,60),br,submit,$_,end_html 
  
 1 byte 長くなった。むぅ。 
84(1): nobodyさん [sage] 02/11/26 06:11 ID:??? AAS
 書き忘れたけど、78-82 はWin/ActivePerlで作ってました。 
 他の環境に移したら CGI.pm 2.56 で同様のエラーが出たので 
 パッケージ名をつけてCGI::escapeHTMLで対応。 
 もしくは、モジュールを新しくする。でいいかな>対策 
  
 NOTE 
 QUERY_STRING を PATH_INFO に変更して 
 url の区切りを ? -> / に。 
 # 勿論、 s/// のスラッシュも他の記号に変更する。 
  
 (stat)[9] 
BUG 
 ページ読むだけでも書き込みしてるので 
 タイムスタンプが。。
85: nobodyさん [sage] 02/11/26 22:06 ID:??? AAS
 >>84 
 パッケージ名付けた方が優しいかな。> escapeHTML 
  
 タイムスタンプのバグフィクス版。以下の環境で動作。 
 ・Perl 5.005_03, CGI.pm 2.46 
 ・Win98SE, AN-HTTPD 1.41g 
 ・FreeBSD 4.7R, Apache/1.3.27 
  
 #!/usr/local/bin/perl 
 use CGI':all';$w='\b(([A-Z][a-z]+){2,})';($p)=($ENV{PATH_INFO}||FrontPage)=~/$w 
 /x;if(open F,($m=param z)?">$p":$p){eval{flock F,2};$/=();$_=CGI::escapeHTML($m 
 ||=<F>);truncate F,0;seek F,0,0;print F$m;close F}opendir D,'./';$_=join hr, 
 endform,pre($_),ul map{li localtime((stat)[9])." $_"}sort{-M$a<=>-M$b}grep/$w$/ 
 ,readdir D;$f=script_name;s|$w|a{href=>"$f/$1"},$1|eg;put header,start_html($p) 
 ,startform(0,"$f/$p"),h1($p),textarea(z,$m,6,60),br,submit,$_,end_html 
  
 AN-HTTPD だとグロブ効かなかったので readdir に変更。 
 i-httpd だと PATH_INFO 使えなかったけど、まぁこれは 
 少数派という事で。あともしかしたら MacPerl が truncate 
 で引っかかるやも。 
86(1): nobodyさん [sage] 02/11/27 00:19 ID:??? AAS
 CGI.pm 2.752, perl 5.005_03 build for sun4-solaris Apache 1.3.27 
  
 #! perl -w 
 use CGI':all';$w='\b(([A-Z][a-z]+){2,})';$f=script_name;$/=();($p)=(path_info|| 
 FrontPage)=~/$w/;opendir D,'.';if(open F,($m=param z)?">$p":$p){eval{flock F,2} 
 ;$_=CGI::escapeHTML$m||=<F>;eval{truncate F,0};seek F,0,0;print F$m;close F}$_. 
 =hr.ul((map{li"".localtime((stat)[9]),$_}sort{-M$a<=>-M$b}grep/$w$/,readdir D)[ 
 0..9]);s|$w|a{href=>"$f/$1"},$1|eg;put header,start_html$p),h1($p),startform(0 
 ,"$f/$p"),textarea(z,$m,6,60),br,submit,endform,pre($_),end_html 
  
 一覧の表示数制限機能追加。 
 truncate は eval で対応できるかな?>MacPerl
87: nobodyさん [sage] 02/11/27 01:56 ID:??? AAS
 #! perl -w 
 use CGI':all';$w='\b(([A-Z][a-z]+){2,})';$/=();($p)=(path_info||FrontPage)=~/$w 
 /x;$f=script_name."/";opendir D,'.';if(open F,($m=param z)?">$p":$p){eval{flock 
 F,2};$_=CGI::escapeHTML$m||=<F>;eval{truncate F,0};seek F,0,0;print F$m;close F 
 }$_.=hr.ul((map{li"".localtime((stat)[9]),$_}sort{-M$a<=>-M$b}grep/$w$/,readdir 
 D)[0..14]);s|$w|a{href=>$f.$1},$1|eg;put header,start_html($p),h1($p),startform 
 (0,$f.$p),textarea(z,$m,6,60),br,submit,endform,pre($_),end_html 
  
 -1byte 
88(1): nobodyさん [sage] 02/11/27 06:40 ID:??? AAS
 #! perl -w 
 use CGI':all';@c=qw/white eeeeff/;$d=0;$e=path_info();$f=script_name;*p=*param; 
 $h=DELETE;$i=RENAME;$j=COPY;$k=FILES;opendir D,"./$e";if(p$h){unlink p$k}put 
 header,start_html('7files'),startform(0,$t),table(Tr([th({bgcolor=>ddddff},['', 
 qw/Name Size LastModified/]),(map{td({bgcolor=>$c[$d++%2]},[checkbox($k,0,$_,'' 
 ),g($_)." ".a({href=>"$f/$_"},$_),-s,"".localtime((stat)[9])])}sort{$a cmp $b} 
 grep/^[^.]/,readdir D)])),(map{submit$_}($i,$j,$h)),endform,end_html;sub g{$t= 
 -d$_[0]?'folder':'text';img{src=>"/icons/$t.gif",alt=>$t}} 
  
 ファイル削除 CgI あぱっち用  
 RENAME と COPY は未実装。もうちょっと痩せないとなぁ・・ 
WikiName のリンク処理(存在しないページのリンクは?に。 
 s|$w|(-f$1?'':$1).a{href=>$f.$1},-f$1?$1:'?'|eg; 
89(1): nobodyさん [sage] 02/11/27 08:37 ID:??? AAS
 検索エンジン 
  
 <? fopen("外部リンク:www.yahoo.co.jp");?> 
90(2): nobodyさん [sage] 02/11/27 09:55 ID:??? AAS
 >>89 
 Warning: fopen() expects at least 2 parameters, 1 given in ...
91: nobodyさん [sage] 02/11/27 20:42 ID:??? AAS
 7wiki.cgi 、一旦まとめ。(w 
  
 #! perl 
 use CGI':all';$w='\b(([A-Z][a-z]+){2,})';($p)=(path_info||FrontPage)=~/$w/;$/=( 
 );$f=script_name."/";opendir D,".";if(open F,($m=param z)?">$p":$p){eval{flock 
 F,2};$_=CGI::escapeHTML($m||=<F>);eval{truncate F,0};seek F,0,0;print F$m;close 
 F}$_=pre($_).hr.ul map{li"".localtime((stat)[9]),$_}sort{-M$a<=>-M$b}grep/$w$/, 
 readdir D;s|$w|(!-f$1&&$1).a{href,$f.$1},-f$1?$1:"?"|eg;put header,start_html( 
 $p),h1($p),startform(0,$f.$p),textarea(z,$m,6,60),br,submit,endform,$_,end_html 
  
 ・bare word が存在するので perl -w は不可。 
 ・古い CGI.pm は escapeHTML を輸出しないので括弧が必要。 
92(2): nobodyさん [sage] 02/11/28 03:13 ID:??? AAS
 use CGI':all';$w='\b(([A-Z][a-z]+){2,})';$f=script_name."/";opendir D,".";$/=() 
 ;($p)=(path_info||FrontPage)=~/$w/;if(open F,($m=param z)?">$p":$p){eval{flock 
 F,2};$_=submit.endform.hr.pre CGI::escapeHTML($m||=<F>);eval{truncate F,0};seek 
 F,0,0;print F$m;close F}$_=br.$_.hr.ul map{li"".localtime((stat)[9]),$_}sort{-M 
 $a<=>-M$b}grep/$w$/,readdir D;s|$w|(!-f$1&&$1).a{href,$f.$1},-f$1?$1:"?"|eg;put 
 header,start_html($p),h1($p),startform(0,$f.$p).textarea(z,$m,6,60),$_,end_html 
-w は >>86 の環境では付けないとCGIとして動かなかったんだけど・・ 
 どうしてだろう?z maybe crash って warning 出すのはわかっていたけど 
 ちゃんと動いていたような気がする。(エラーログ今度ちゃんと見て来よう。 
TextRule に Pod::Htmlを使おうとしたが、 
 pod2html はファイルを対象としているため実装を断念。 
 残り一行じゃ TextRuleは辛いかな・・URLのリンクくらいなら追加出来そう・・? 
93(1): nobodyさん [sage] 02/11/28 03:23 ID:??? AAS
 あっ バグ・・・今気付いた。 
 open が失敗した時困るかな >>92 
94(1): nobodyさん [sage] 02/11/28 05:30 ID:??? AAS
 >>88 
 アイコンと th 無くして、あと目に付いたトコだけザッと。 
  
 #! perl -w 
 use CGI':all';*p=*param;$d=path_info;$t=opendir D,".$d";$F=F;($c=$f=script_name 
 )=~s|/[^/]+$||;$R=REN;$C=CP;$D=DEL;p$D&&unlink p$F;put header,start_html(7files 
 ),startform(0,$f),table(Tr[map{$i="$d/$_";($l,$s)=-d".$i"?($f.$i,'DIR'):($c.$i, 
 -s _);td({bgcolor,(white,eeeeff)[$t++%2]},[checkbox($F,0,$_,''),a({href,$l},$_) 
 ,$s,"".localtime((stat)[9])])}sort grep!/^\./,readdir D]),(map{submit$_}$R,$C, 
 $D),endform,end_html 
95: nobodyさん [sage] 02/11/28 05:55 ID:??? AAS
 >>94 修正…。 
  
 use CGI':all';($c=$f=script_name)=~s|/[^/]+$||;$d=path_info;$t=opendir D,".$d"; 
 $F=F;$M=MV;$C=CP;$R=RM;*p=*param;p$D&&unlink p$F;put header,start_html('7files' 
 ),startform(0,$f),table(Tr[map{$i="$d/$_";($l,$s)=-d".$i"?($f.$i,'DIR'):($c.$i, 
 -s _);td({bgcolor,(white,eeeeff)[$t++%2]},[checkbox($F,0,$_,''),a({href,$l},$_) 
 ,$s,"".localtime((stat)[9])])}sort grep!/^\./,readdir D]),(map{submit$_}$M,$C, 
 $R),endform,end_html
96: nobodyさん [sage] 02/11/28 06:10 ID:??? AAS
 >>92 
 成る程、そういう環境もありますか。 
 warning 吐きまくるのはヤだなぁと思っただけなんで、 
 shebang line は適宜変更でいいですかのぅ。 
  
 つか valid な HTML にはあまりこだわってませんか。 
  
 URL リンクはこうかな…。 
 s|(http://[\w!#-;=?-@~]+)|a{href,$1},$1|eg; 
  
 >>93 
 困りました。:)
97(1): nobodyさん [sage] 02/11/28 11:46 ID:??? AAS
 >困りました。:)  
 ごめん。パズルに夢中でperl -cしかチェックしてなかったw 
 書きこみ、 新規ページ作成 テスト、以後気を付けます。テスト書こうっと 
  
 HTMLの構文チェックもしてません。出力はCGI.pm任せなので、 
 少なくともwelformedにはなってるはずだけど・・ 
7wiki.cgi 6行76桁 
 use CGI':all';$w='\b(([A-Z][a-z]+){2,})';$/=();$f=script_name;($p)=(path_info|| 
 FrontPage)=~/$w/;opendir D,".";if(open F,($m=param z)?">$p":$p){eval{flock F,2} 
 ;eval{truncate F,0};seek F,0,0;print F$m||=<F>;close F}$_=pre CGI::escapeHTML($ 
 m).hr.ul map{li"".localtime((stat)[9]),$_}sort{-M$a<=>-M$b}grep/$w$/,readdir D; 
 s|$w|(!-f$1&&$1).a{href,"$f/$1"},-f$1?$1:"?"|eg;put header,start_html($p),h1($p 
 ),startform(0,"$f/$p").textarea(z,$m,6,60),br,submit.endform.hr.$_,end_html
98(1): nobodyさん [sage] 02/11/29 06:36 ID:??? AAS
 >>97 
 うん、well-formed ではあるけど、pre に hr や ul が入ってるから 
 valid じゃないよね。 
  
 別にいちゃもん付けてるんじゃ無くて、七行に収まってる状態で更に 
 数 byte の為に valid な出力を諦めるか否かは好みの問題だから、 
 何としても縮める方針でやってるのかな、と。挙動が変更されたコード 
 見たら、何を意図してるか大体分かるでしょ。 
  
 で、俺は shebang 込みで七行派だから、7wiki.cgi に関しては >>97 か 
 下ので完成気分。shebang 無し七行で続けるなら、それはそれで参加 
 させてもらうけどね。 
  
 #! perl -w 
 use CGI':all';$w='\b(([A-Z][a-z]+){2,})';$/=();$f=script_name;($p)=(path_info|| 
 FrontPage)=~/$w/;opendir D,".";if(open F,($m=param z)?">$p":$p){eval{flock F,2} 
 ;eval{truncate F,0};seek F,0,0;print F$m||=<F>;close F}$_=pre(CGI::escapeHTML($ 
 m)).hr.ul map{li"".localtime((stat)[9]),$_}sort{-M$a<=>-M$b}grep/$w$/,readdir D 
 ;s|$w|(!-f$1&&$1).a{href,"$f/$1"},-f$1?$1:"?"|eg;put header,start_html($p),h1($ 
 p),startform(0,"$f/$p"),textarea(z,$m,6,60),br,submit,endform,hr,$_,end_html 
99(1): nobodyさん [sage] 02/11/29 08:01 ID:??? AAS
 7files.cgi 
  
 use CGI':all';*p=*param;($c=$f=script_name)=~s|/[^/]+$||;$d=path_info;opendir D 
 ,$e=".$d/";sub cp{}$F=p(F);$N=$e.p(N);($_=p(S))=~/MV/?rename$F,$N:/CP/?cp$F,$N: 
 /RM/?unlink$F:0;put header,start_html('7files'),startform(0,"$f$d"),table(Tr[ 
 map{$i="$d/$_";($l,$s)=-d".$i"?($f.$i,DIR):($c.$i,-s _);td({bgcolor,(silver, 
 white)[$t++%2]},[checkbox(F,0,".$i",''),a({href,$l},$_),$s,"".localtime((stat)[ 
 9])])}sort grep!/^\./,readdir D]),textfield(N),map(submit(S,$_),MV,CP,RM), 
 endform,end_html 
  
 rename 実装。copy が悩み処ですな。 
100(3): nobodyさん [sage] 02/11/29 08:04 ID:??? AAS
 rename の仕方: 
 変更したいファイルにチェック、textfield に変更後の名前を入れて MV 
101(1): nobodyさん [sage] 02/11/29 09:06 ID:??? AAS
 >>98 
 お疲れ様 && ありがとう。色々と勉強になりました。 
  
 no strict で bare word 使い始めた当たりから 
 短くすることを優先させてました。use strictなしって時点で 
 すでに気持ち悪かったwので「汚くても動けばいいや」って感じだった 
  
 HTMLもチェックしていなかった位だから、当然拘っていませんでした 
 (HTMLは、7行って時点で最初から諦めていたかもしれない 
  
 ただ、valid な出力にするとなると、 
 CGI.pm の textarea が rows,colsの属性の値をクオートしない。 
 br, hr は、p,div,h[1-6] 等の親要素が必要 
 等々、新たな課題が出てくるんじゃないかな? 
上下前次1-新書関写板覧索設栞歴
あと 351 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.024s