七行プログラミング (452レス)
上下前次1-新
60(2): nobodyさん [] 02/11/04 15:47 ID:CMvXGJGy(1) AAS
 (・ε・)v キニシナイ! 
61: nobodyさん [sage] 02/11/04 20:59 ID:??? AAS
 HTML4.01strictとかどうよw 
62: nobodyさん [sage] 02/11/04 23:14 ID:??? AAS
 >>5757(1): nobodyさん [sage] 02/11/04 12:16 ID:??? AAS
 やはりCGIだと、定型的な部分で多く取られてしまいますな。  
試しにHTMLを分離して作ってみたら大分縮んだ。 
 外部リンク[gz]:boobar.hp.infoseek.co.jp 
  
 >>5858(1): ( ´∀`)でけた〜 [sage] 02/11/04 12:59 ID:??? AAS
 [アクセス解析] 
 CGI名: a.cgi 
 空ファイル用意: log 
 そのままアクセスしてログ取り 
 引数に a をつけて解析結果表示 
  
 #!/usr/bin/perl 
 &a if $ENV{QUERY_STRING}eq'a';($s,$m,$j,$d,$g,$y)=gmtime(time+9*60*60);$i=$ENV{ 
 REMOTE_ADDR};$h=$ENV{REMOTE_HOST}||gethostbyaddr(pack('C4',split(/\./,$i)),2)|| 
 $i;$y=sprintf("%d/%02d/%02d/ %02d:%02d:%02d",$y+=1900,++$g,$d,$j,$m,$s);open(F, 
 '+<log');@d=<F>;unshift(@d,"$y,$h,$ENV{HTTP_USER_AGENT},$ENV{HTTP_REFERER}\n"); 
 seek(F,0,0);print F @d;sub a{print"Content-type:text/html\n\n";open(F,'log'); 
 while(<F>){($t,$h,$u,$r)=split(/,/,$_);print"$t<br>$h<br>$u<br>$r<hr>"}exit}  
縮めてみた。 
  
 #!/usr/bin/perl 
 if($ENV{QUERY_STRING}eq'a'){open F,'log';print"Content-Type: text/html\n\n",map 
 join('<br>',split/,/).'<hr>',<F>;exit}$i=$ENV{REMOTE_ADDR};$h=$ENV{REMOTE_HOST} 
 ||gethostbyaddr(pack('C4',split/\./,$i),2)||$i;($s,$m,$j,$d,$g,$y)=localtime; 
 open F,'+<log';eval{flock F,2};@d=(sprintf('%d/%02d/%02d %02d:%02d:%02d',1900+ 
 $y,$g+1,$d,$j,$m,$s).",$h,$ENV{HTTP_USER_AGENT},$ENV{HTTP_REFERER}\n",<F>); 
 truncate F,0;seek F,0,0;print F @d 
63: age [age] 02/11/05 18:48 ID:??? AAS
 age 
64: nobodyさん [] 02/11/14 07:16 ID:M/ZRCXHw(1) AAS
 あげ 
65: nobodyさん [] 02/11/20 18:28 ID:707UhyRv(1) AAS
 7行Wikiくれ。 
66(1): nobodyさん [sage] 02/11/21 07:14 ID:??? AAS
 ---- 7wiki.cgi 
 #!/usr/local/bin/perl -w 
 use strict; use CGI qw/:standard/; use AnyDBM_File; use Fcntl; 
 my$id=$ENV{'QUERY_STRING'}||'FrontPage';my$msg=param('msg')||''; 
 my$url='./7wiki.cgi'; tie(my%DB,'AnyDBM_File','wiki',O_CREAT|O_RDWR,0666)or die; 
 if ($msg){$DB{$id}=$msg} $msg=escapeHTML $DB{$id}; untie(%DB);print header; 
 print qq(<form action="$url?$id" method="POST"><input type="submit"><b>$id</b> 
 <br /><textarea name="msg" rows="6" cols="60">$msg</textarea></form><hr />); 
 $msg=~s/\b([A-Z][a-z]+([A-Z][a-z]+)+)\b/<a href="$url?$1">$1<\/a>/g;print $msg;
67(1): nobodyさん [sage] 02/11/21 19:40 ID:??? AAS
 >>66 
  
 #!/usr/local/bin/perl -w 
 use strict;use CGI':standard';use AnyDBM_File;use Fcntl;tie(my%D,'AnyDBM_File', 
 '7wiki',O_CREAT|O_RDWR,0666)||die;my$i=$ENV{QUERY_STRING}||'FrontPage';$_= 
 escapeHTML($D{$i}=param('m')||$D{$i});untie%D;print header(),qq(<form 
 action="7wiki.cgi?$i" method="post"><input type="submit" /><b>$i</b><br /> 
 <textarea name="m" rows="6" cols="60">$_</textarea></form><hr />); 
 s|\b([A-Z][a-z]+([A-Z][a-z]+)+)\b|<a href="7wiki.cgi?$1">$1</a>|g;print 
  
 \b 要る? 
68: nobodyさん [] 02/11/21 22:28 ID:mGPCTII6(1) AAS
 >>67 
 thx ...  
  
 WikiName の正規表現は \b([A-Z][a-z]+){2,}\b って書けるみたいだね。 
 \b 要るかどうかしらないけど、個人的には欲しい。 
 # 外部リンク:c2.com 
  
 > s|\b([A-Z][a-z]+([A-Z][a-z]+)+)\b|<a href="7wiki.cgi?$1">$1</a>|g; 
 < s|\b([A-Z][a-z]+){2,}\b|a "7wiki.cgi?$1",$1|ge; 
  
 多少、汚くても良いのなら、 
 - use Fcntl やめて O_CREAT|O_RDWR は定数で 
 - s/standard/all/; tr/"//d; s/AnyDBM/DBM/g; s' /''g; 
 - s/use strict;/; s/\bmy\b/g; 
 - etc .. 
 ・・・で、4〜5行くらいにはダイエット出来るかな。 
  
 短いwiki・・・他に、こんなのもあるよ。 
 外部リンク:c2.com 
69: nobodyさん [sage] 02/11/21 22:40 ID:??? AAS
 間違えた・・ 
 s|\b([A-Z][a-z]+){2,}\b|a{href=>"7wiki.cgi?$1"},$1|ge; 
70(2): nobodyさん [sage] 02/11/21 22:52 ID:??? AAS
 括弧わすれてた・・・ゴメン(再び修正 
  \b(([A-Z][a-z]+){2,})\b
71(1): nobodyさん [sage] 02/11/22 07:28 ID:??? AAS
 use CGI':all';use SDBM_File;$i='7wiki.cgi';$j=$ENV{QUERY_STRING}||'FrontPage'; 
 tie%D,'SDBM_File',$i,258,438or die;$_=$D{$j}=param('m')||$D{$j};untie%D;put 
 header,startform('post',"$i?$j"),submit,b($j),br,textarea('m',$_,6,60),endform 
 ,hr;$_=escapeHTML$_;s|\b(([A-Z][a-z]+){2,})\b|a{href=>"$i?$1"},$1|ge;put$_ 
72: nobodyさん [sage] 02/11/22 14:36 ID:??? AAS
 Good job. 
73: nobodyさん [sage] 02/11/22 18:30 ID:??? AAS
 折角なので副産物も(ワンライナーだけど 
 れぎゅれーしょん ちぇっか usage: ./7rc.pl < target_script.pl 
  
 #! perl -nw 
 chomp;length>7979(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;  
||$.>77(3): nobodyさん [0] 02/11/01 18:52 ID:??? AAS
 #!/usr/local/bin/perl 
  
 if (>>1 = "バカ") { 
     print "イッテヨシ"; 
 } else { 
     print "マターリしましょう"; 
 }  
?die:print"line $. OK\n"
74(1): nobodyさん [sage] 02/11/24 15:39 ID:??? AAS
 >>71 
 use Fcntl; 
 はいらないのか? 
75(1): nobodyさん [sage] 02/11/24 17:47 ID:??? AAS
 use Fcntl; O_CREAT|O_RDWR を纏めて 286(tie の引数 
  
 定数部分は環境依存するかも知れないので 
 /usr/include/sys/fcntl.h を参照
76: nobodyさん [sage] 02/11/25 00:58 ID:??? AAS
 DB_File なら use した時点で O_CREAT も O_RDWR も使えるようになる罠。 
  
 use DB_File; 
 print join '/', O_CREAT => O_CREAT, O_RDWR => O_RDWR; 
  
 そして O_CREAT は実際 512 だったり 256 だったりする罠。 
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 とかでも無理かな? 
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
 >>75 
 勉強になりました。 
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 
 ページ読むだけでも書き込みしてるので 
 タイムスタンプが。。
上下前次1-新書関写板覧索設栞歴
あと 368 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.021s