七行プログラミング (452レス)
上下前次1-新
158(1): nobodyさん [sage] 03/08/17 15:16 ID:??? AAS
 山崎ばかりなのもナニなので kat2xhtml 更新。あと 10 byte ほどなんだが…。 
  
 $l='<a href="';sub a{"$l@_\">$a</a>"}sub p{"<span class=\"@_</span>"}while(<>){ 
 ($n,$m,$d,$_,$t,$")=split/[,\n]/;$.-1or$T=$t;$n=~m|<b>([^<]*)(</b>([^<]*))?|;$n 
 =($1&&p"n\">$1").($3&&p"m\">$3");$n=p qq|k" title="$m">$n|if$m.0;s/\x81\x97\x81 
 M/,/gx;s/\s+(target="\w*"|$)//g;s|\s*<br>|<br />|g;s/&(?!\w+;|\#\d+;)/&/g;( 
 ($u,$a)=/^$l([^"]+)">([^<]+)/)?($_=$u=~s/~/%7E/g?a$u:$a=~/^(>){1,2}(\d+)/?a 
 "#R$2":$_):s/"/"/g for@r=split/($l[^"]+">[^<]+<\/a>)/;$A.="<dt>$. :<a id" 
 ."=\"R$.\">$n :$d</a></dt><dd>@r</dd>\n"}open T,$/="$0.tmpl";$_=<T>;s/%(.)/${ 
 $1}/g;print 
  
 ・?xHHHH 形式の数値実体参照を諦め。 
 ・テンプレートのファイル名を "$0.tmpl" に。 
 ・説明やら入れたアーカイヴは 外部リンク:cm.xrea.cc に。 
159: nobodyさん [sage] 03/08/17 15:19 ID:??? AAS
 >>158 
 s/?xHHHH/&#xHHHH/; 
160(1): nobodyさん [sage] 03/08/18 07:15 ID:??? AAS
 ちょっと長くなったけど、初心者質問スレを荒らしている彼に捧げよう。(w 
  
 #--- br.p --- 
 package P;sub c{bless pop,pop}sub s{$_[0]->{s}}sub n{$_[0]->{n}}sub h{my($s,$c) 
 =@_;$c||return$s->{h};($s->{h}+=$c)>0or$s->{h}=0}sub b{my($s,$e)=@_;my@w=keys%{ 
 $s->{w}};my$w=$w[int rand@w];print$s->n,' は ',$w," で攻撃!\n";my($d,$a)=@{$s-> 
 {w}{$w}}{d,a};$d=(my$n=int rand 101)>$a?0:$n>$a/2?int($d/2)-$e->s:$n>$a/20?$d- 
 $e->s:$d;print$d<=0?"ミス!\n":($e->n,' に ',$d," ポイントのダメージ!\n");$e->h( 
 -$d)||print$e->n," を倒した!\n"}package main;sub p{splice@p,int rand@p,1}@p=map 
 P->c($_),@{do'./p.dat'};while(@p>1){my$o=p;my$d=p;print"\n",$o->n,':',$o->h,' ' 
 ,$d->n,':',$d->h,"\n";$o->b($d);push@p,$o;$d->h>0&&push@p,$d}print(shift(@p)->n 
 , " の 勝利!\n") 
  
 #--- p.dat --- 
 [{n=>'煽り',h=>400400(2): nobodyさん [] 2006/02/28(火) 10:19:55 ID:5vE9CKm+(1) AAS
 #!/usr/bin/perl  
 if($ENV{'REQUEST_METHOD'}eq'POST'){read(STDIN,$b,$ENV{'CONTENT_LENGTH'});  
 foreach(split(/&/,$b)){($c,$d)=split(/=/,$_);$d=~tr/+/ /;  
 $d=~s/%([a-f\d]{2})/pack('H2',$1)/egi;$form{$c}=$d}open(F,'>>z.txt');  
 print F "$form{y}\n";close F}print"Content-type:text/html\n\n<html>  
 <form action=x.cgi method=post><input type=text name=y><input type=submit>  
 </form><br><br>";open(F,'z.txt');while(<F>){print "$_<br>\n"}print'</html>';   
s=>1010(3): nobodyさん [sage] 02/11/01 19:53 ID:??? AAS
 ワーイ 3行にナッター 有難う。 
 まだまだperl勉強中の身ですー  
w=>{'キック'=>{d=>60a=>60},'パンチ'=>{d=>20a=>70},}} 
 ,{n=>'荒らし',h=>300s=>0w=>{'キック'=>{d=>100a=>60},'パンチ'=>{d=>40a=>70}} 
 },{n=>'夏厨',h=>200s=>20w=>{'キック'=>{d=>80a=>90},'パンチ'=>{d=>10a=>100}} 
 }]; 
161: nobodyさん [sage] 03/08/18 12:36 ID:??? AAS
 >>160 
 ワロタ 
162: nobodyさん [sage] 03/08/19 11:57 ID:??? AAS
 縮めて CGI プログラムにした。これで彼も満足だろう。 
  
 #--- br.cgi --- 
 #!/usr/local/bin/perl 
 use CGI':all';put header(-charset=>($c='EUC-JP')),start_html(-lang=>ja,-title=> 
 'B.R.',-encoding=>$c);@p=@{do'br.dat'};sub e{splice@p,int rand@p,1}while(@p>1){ 
 *o=e;*d=e;put p"$o{N}:$o{H} $d{N}:$d{H}";@w=keys%{$o{W}};$w=$w[int rand@w];($p, 
 $a)=@{$o{W}{$w}}{D,A};put p("$o{N}は$wで攻撃!",(($p=($n=int rand 101)>$a?0:$n> 
 $a/2?int($p/2)-$d{S}:$n>$a/20?$p-$d{S}:$p)>0or$p=0)?"$d{N}に$pポイントのダメー" 
 .'ジ!':'ミス!');($d{H}-=$p)>0or put p"$d{N}を倒した!";push@p,\%o;$d{H}>0&&push 
 @p,\%d}put p(pop(@p)->{N}, 'の勝利!'),end_html 
  
 #--- br.dat --- 
 [ 
 {N=>'煽り',  H=>400S=>10W=>{'キック'=>{D=>60 A=>60},'パンチ'=>{D=>2020(2): nobodyさん [sage] 02/11/02 00:10 ID:??? AAS
 print <<7LINE; 
 ******************************************************************************* 
 ******************************************************************************* 
 ******************************************************************************* 
 ******************************************************************************* 
 ******************************************************************************* 
 ******************************************************************************* 
 ******************************************************************************* 
 7LINE  
A=>7070(2): nobodyさん [sage] 02/11/21 22:52 ID:??? AAS
 括弧わすれてた・・・ゴメン(再び修正 
  \b(([A-Z][a-z]+){2,})\b 
 }}}, 
 {N=>'荒らし',H=>300S=>0 W=>{'キック'=>{D=>100A=>60},'パンチ'=>{D=>40A=>70 }}}, 
 {N=>'夏厨',  H=>200S=>20W=>{'キック'=>{D=>80 A=>90},'パンチ'=>{D=>10A=>100}}}, 
 ];
163: nobodyさん [sage] 03/08/20 07:02 ID:??? AAS
 メッセージを削るという安直な方法で七行達成。 
  
 #!/usr/local/bin/perl 
 use CGI':all';put header(-charset=>($c='EUC-JP')),start_html -lang=>ja,-title=> 
 BR,-encoding=>$c;@p=@{do'br.dat'};while(@p>1){put p map"$_->{N}:$_->{H}",@p;*d= 
 splice@p,int rand@p,1;*o=$p[int rand@p];@w=keys%{$o{W}};($p,$a)=@{$o{W}{$w=$w[ 
 int rand@w]}}{D,A};put p"$o{N}は$d{N}に$wで攻撃!",(($p=($n=int rand 100)>$a?0: 
 $n>$a/2?int($p/2)-$d{S}:$n>$a/20?$p-$d{S}:$p)>0or$p=0)?"$pダメージ!":'ミス!';( 
 $d{H}-=$p)>0?push@p,\%d:put p b"$d{N}を倒した!"}put p"$p[0]{N}の勝利!",end_html 
164(1): nobodyさん [sage] 03/08/28 05:11 ID:??? AAS
 「素早さ」を実装したいけど、どうも巧くない。 
  
 #--- br.dat --- 
 # 名前, 防御力, 体力, 素早さ(1〜99), [ [ 武器名, 攻撃力, 命中率(1〜99) ] ... ] 
 [ 
 [ '煽り',  10, 300, 99, [['キック',60,50], ['パンチ',30,70]] ], 
 [ '荒らし', 0, 400, 50, [['キック',90,70], ['パンチ',40,80]] ], 
 [ '夏厨',  20, 200, 25, [['キック',80,90], ['パンチ',20,90]] ], 
 ]; 
  
 #--- br.cgi (素早さ実装版) --- 
 #!/usr/local/bin/perl 
 use CGI':all';put header(-charset=>($C='EUC-JP')),start_html -encoding=>$C,lang 
 ,ja,title=>BR;@p=@{do'br.dat'};while($#p){put p map"[$_->[0]:$_->[2]]",@p;$N=0; 
 {for(0..$#p){int$c%(99/$p[$_][3])&&next;($N,*W)=@{*O=splice@p,$_,1}[0,4];($W,$D 
 ,$A)=@{$W[rand@W]};last}$c=0if++$c>9999(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 が悩み処ですな。  
;$N||redo}($n,$s)=@{*d=splice@p,rand@p,1}; 
 put p"$Nは$nに$W!",(($D-=($i=rand 100)>$A?$D:$i>$A/2?int($D/2)+$s:$i>$A/20?$s:0 
 )>0or$D=0)?"$Dダメージ!":'ミス!';@p=sort{$b->[3]<=>$a->[3]}@p,\@O;($d[2]-=$D)>0 
 ?@p=(\@d,@p):put p b"$nを倒した!"}put p"$Nの勝利!",end_html 
  
 #--- br.cgi (素早さ未実装版) --- 
 #!/usr/local/bin/perl 
 use CGI':all';put header(-charset=>($C='EUC-JP')),start_html -encoding=>$C,lang 
 ,ja,title=>BR;@p=@{do'br.dat'};while($#p){put p map"[$_->[0]:$_->[2]]",@p;($N, 
 *W)=@{$p[-1]}[0,4];($W,$D,$A)=@{$W[rand@W]};($n,$s)=@{*d=splice@p,rand$#p,1}; 
 put p"$Nは$nに$W!",(($D-=($i=rand 100)>$A?$D:$i>$A/2?int($D/2)+$s:$i>$A/20?$s:0 
 )>0or$D=0)?"$Dダメージ!":'ミス!';($d[2]-=$D)>0?push@p,\@d:put p b"$nを倒した!"} 
 put p"$Nの勝利!",end_html 
165: nobodyさん [sage] 03/08/28 12:01 ID:??? AAS
 >>164 
 まだやってたのかよw 
  
 がんがれ! 
166(1): 保守 [sage] 03/10/04 05:54 ID:??? AAS
 $$_=1for"@ARGV"=~/\w/g;for('0019'..9999){my%c;$n=$_;next if$h{"@{[sort@v=/./g]} 
 "}++&&$o||$z&&/0/||$d&&(grep$c{$_}++,@v);O:for(map[@{[qw(+ - * /)]}[$_&3,$_>>2& 
 3,$_>>4&3]],0..63){@x=(@$_,@v);eval==10&&do{print"$n:$_\n";$c&&last O}for grep 
 s/(\d)/$x[$1]/g,qw/(304)1(526) ((304)15)26 30(41(526)) 30((415)26) (30(415))26/ 
 }} 
167: nobodyさん [sage] 03/10/05 03:33 ID:??? AAS
 本家スレで出てた切符問題の CGI プログラム版。 
 選択された4つの数字のみを調べる。 
  
 #!/usr/local/bin/perl 
 use CGI':all';@n=param n;for(map[@{[qw(+ - * /)]}[$_&3,$_>>2&3,$_>>4&3]],0..63) 
 {@x=(@$_,@n);for$t(qw/(304)1(526) ((304)15)26 30(41(526)) 30((415)26)/,'(30(41' 
 .'5))26'){$_=$t;s/(\d)/$x[$1]/g;eval==10&&push@e,$_.br}}put header,start_html( 
 -title=>7410),startform(0,script_name),p(scrolling_list(qw(-name n -size 10), 
 -values=>[0..9])x4,submit),endform,p(@e),end_html 
  
 >>166 は 5.005_03 なら動いたけど 5.8.0 だと不可。 
168: nobodyさん [sage] 03/10/05 20:23 ID:??? AAS
 コマンドライン・CGI 両対応版。 
  
 #--- 7410.cgi --- 
 #!/usr/local/bin/perl 
 use CGI':all';sub e{for(map[@{[qw(+ - * /)]}[$_&3,$_>>2&3,$_>>4&3]],0..63){@x=( 
 @$_,@n);for$t(qw/(304)1(526) ((304)15)26 30(41(526)) 30((415)26) (30(415))26/){ 
 $_=$t;s/(\d)/$x[$1]/g;eval==10&&do{$r?push@e,$_.br:print"$n:$_\n";$c&&return}}} 
 @e}if($r=$ENV{'REMOTE_ADDR'}){@n=param n;put header,start_html(-title=>7410), 
 startform(0,script_name),p(scrolling_list(qw(-name n -size 10 -values),[0..9])x 
 4,submit),endform,p(e),end_html}else{$$_=1for"@ARGV"=~/\w/g;$n=$_,$h{"@{[sort@n 
 =/./g]}"}++&&$o||$z&&/0/||$d&&do{my%c;grep$c{$_}++,@n}or e for'0019'..9999} 
 __END__ 
  
 usage: ./7410.cgi [ -cdoz ] 
 -c : 1組の数字に対し1つの計算式のみ出力 
 -d : 同じ数字を使わない 
 -o : 1組の数字に対し1つの出現順序のみ出力 
 -z : 0を含めない 
169: nobodyさん [sage] 03/10/08 01:14 ID:??? AAS
 5.005_03 と 5.8.0 の両方でマジメにチェック & 縮め。 
  
 #!/usr/local/bin/perl 
 use CGI':all';sub e{my@e;for(0..63){@x=(@{[qw(+ - * /)]}[$_&3,$_>>2&3,$_>>4&3], 
 @n,param n);for$t(qw/(304)1(526) ((304)15)26 30(41(526)) 30((415)26) 
 (30(415))26/){$_=$t;s/(\d)/$x[$1]/g;10-eval or$r?push@e,$_.br:put("$n:$_\n"),$c 
 &&return}}@e}($r=$ENV{REMOTE_ADDR})?put(header,start_html(-title=>7410), 
 startform(0,script_name),p(scrolling_list(-values=>[0..9],name,n,size,10)x4, 
 submit),endform,p(e),end_html):do{$$_=1for"@ARGV"=~/\w/g;$n=$_,$h{"@{[sort@n= 
 /./g]}"}++&&$o||$z&&/0/||$d&&4>keys%{{map{$_,1}@n}}or e for'0019'..'9999'} 
170: 7blosxom [] 03/12/01 03:01 ID:i/vnv4B8(1/4) AAS
 #!/usr/bin/perl 
 use CGI':all';use File::Find;$n=param('n')||0;@i=split'/',path_info;shift@i;($y, 
 $m,$d)=grep{/^\d+$/}@i;$p=join'/',grep{/^\D+$/}@i;find sub{($f=$File::Find::name 
 )=~/\.txt$/and$e{$f}=-M},"./$p";put header,start_html;for((sort{$e{$a}<=>$e{$b}} 
 keys%e)[$n..$n+40]){($z,$x,$c)=(localtime(time-60*60*24*$e{$_}))[5,4,3];next if( 
 ($y&&$y!=$z+1900)or($m&&$m!=$x+1)or($d&&$d!=$c)or!-f);s/^\.\///;open(F,$_)&&{ 
 chomp($t=<F>),put(a({-href=>url."/$_"},h2 $t),<Fhr,"\n"),close F}}put end_html 
171: 7blosxom [] 03/12/01 03:13 ID:i/vnv4B8(2/4) AAS
 久しぶりに7行プログラミング。 
  
 PATH_INFOで指定できるのは、日付とカテゴリのみ。 
 月の指定は数字のみ可能。Decとかには未対応。 
 indexや他のFlavourは未実装。 
  
 リクエストの例 
 ./7blosxom.cgi 
 ./7blosxom.cgi/2003 
 ./7blosxom.cgi/2003/11 
 ./7blosxom.cgi/2003/11/30 
 ./7blosxom.cgi/2003/11/foo 
 ./7blosxom.cgi/2003/foo/bar 
 ./7blosxom.cgi/foo/hoge.txt 
  
 PAGING 機能。意味なくつけてみたけど、いらないよぉな気がする。(TODO remove) 
 ./7blosxom.cgi?n=10 
 ./7blosxom.cgi?n=10/foo/2000 
  
 リクエスト例。例外 
 ./7blosxom.cgi///// ... 何も指定しないのと同じ。 
 ./7blosxom.cgi/2003/11/30/1/ ... 4つめ以降の数字は無視される。 
 ./7blosxom.cgi/foo2/ ... 正規表現が手抜きな為、数字+文字の組合せは無視される。
172: nobodyさん [] 03/12/01 06:28 ID:i/vnv4B8(3/4) AAS
 訂正。HTML&&桁数間違えてた。 
  
 #!/usr/bin/perl 
 use CGI':all';use File::Find;@i=split'/',path_info;shift@i;($y,$m,$d)=grep/^\d+ 
 $/x,@i;$p=join'/',grep{/^\D+$/}@i;find sub{($f=$File::Find::name)=~/\.txt$/and$ 
 e{$f}=-M},"./$p";put header,start_html;for(sort{$e{$a}<=>$e{$b}}keys%e){($z,$x, 
 $c)=(localtime(time-86400*$e{$_}))[5,4,3];if(!(($y&&$y!=$z+1900)or($m&&$m!=$x+1 
 )or($d&&$d!=$c))&&-f&&open F,$_){s/^\.\///;chomp($t=<F>);put hr,h2 a({href,url. 
 "/$_"},$t),pre<F"\n";close F}}put end_html 
  
 - データ用のディレクトリをカレントディレクトリ以外に指定したい場合。 
   ln -s /home/your/data/path home とリンクを作り。 
   7blosxom.cgi/home とアクセスする。
173(1): 128 [] 03/12/01 18:34 ID:xLzdr2os(1) AAS
 それじゃ漏れも久々に投稿。 
 スレッド式掲示板です。 
 データ用ディレクトリ G が必要です。 
  
 ---------------------- 7thread.cgi ----------------------- 
 use CGI":all";charset"x-sjis";*i=*param;*e=*escapeHTML;chdir G;i B,$b,open F,"> 
 $b"if($b=e(i S))&&!-e$b;$b||=i(B);*x=*textfield;open F,"+<$b";[<F>];seekF,0,2;s 
 !外部リンク:.+$!a{href,$&},$&!emg,s/\n/br/eg,$n=e(i N)||'七氏',print F dt(++$.,':'. 
 b(a{i(M)&&(href,'mailto:'.e(i M))},$n),':'.localtime),dd($_.p),"\n"if$_=e(i T); 
 seek F,0,0;put header,start_html($b),h1($b),startform,(i B)?dl(<F>).a{href,'?'} 
 ,'一覧':ol(li[map{a{href,"?B=$_"},$_}sort{-A$a<=>-A$b}<*>]).hr.'スレ'.x(S),hidden 
 (B),br,submit,'名前',x(N),'MAIL',x(M),br,textarea(T,'',6,80,1),endform,end_html 
 ------------------------------------------------------
174(3): nobodyさん [] 03/12/01 20:35 ID:lEOu0k9S(1) AAS
 モジュールありだったらいくらでも短くできるのでは? 
175(5): nobodyさん [] 03/12/01 23:22 ID:i/vnv4B8(4/4) AAS
 #!/usr/bin/perl 
 #7blosxom.cgi 
 use CGI':all';use File::Find;($p,$y,$m,$d)=grep/^\D+$/,(@i=split'/',path_info), 
 grep/^\d+$/,@i;find sub{($f=$File::Find::name)=~/\.txt$/and $e{$f}=-M},"./$p"; 
 put header,start_html;for(sort{$e{$a}<=>$e{$b}}keys%e){($c,$x,$z)=(localtime( 
 time-86400*$e{$_}))[3..5];if(!($y&&$y!=$z+1900||$m&&$m!=$x+1||$d&&$d!=$c)&&-f&& 
 open F,$_){s/^\.\///;chomp($t=<F>);put h2 a({href=>url."/$_"},$t),pre<Fhr; 
 close F}}put end_html 
 __END__ 
  
 変更点 
 < shift@i はいらなかった。 
 < [5,4,3] をスライスに変更。 
 < 変数をまとめて宣言。 
  
 >174 
 そうだね。過去ログを読めばわかる通り、それは人によって意見がわかれる所。標準モジュールはokとか。 
 自分は、モジュールを使っても既存のリソースの有り合わせでおもしろいものが出来ればいいなと思ってる。 
 wikiもCPANのWiki::関連のモジュールを使えば制限内でも、もっと機能追加出来そうだし。 
 ただし、短くするためにわざわざモジュールを作る気はなし。
176: nobodyさん [sage] 03/12/02 14:16 ID:??? AAS
 >>175 
 h2タグの中にpreタグ(と本文)が入るのですが・・・
177(1): nobodyさん [sage] 03/12/02 18:25 ID:??? AAS
 >>175 
 Blosxom 知らんかったので和訳サイト読みながらゴニョゴニョ中。 
 動作確認用の txt ファイルセット用意してくれたら嬉しい。日付と 
 中身が違うファイルを沢山作るのは結構ダルい。;) 
178: nobodyさん [sage] 03/12/02 22:21 ID:??? AAS
 >>173 
 足したり引いたりしてみた。 
  
 use CGI":all";*i=*param;*x=*textfield;sub e{escapeHTML i(pop)}chdir G;-e($b=i(B 
 )||e S)or open F,">$b";open F,"+<$b";eval{flock F,2};[<F>];s!外部リンク:.+$!a{href, 
 $&},$&!eg,s/\n/br/eg,print F dt($.+1,':',b(a{href,'mailto:'.e M},e(N)||nobody), 
 ':'.localtime),dd($_),"\n"if$_=e T;seek F,0,0;put header,start_html($b), 
 startform,$b?h1($b).dl(<F>).hidden(B,$b).a{href,'?'},list:ol(li[map{a{href, 
 "?B=$_"},$_}sort{-M$a<=>-M$b}<*>]).thread.x(S),br,submit,NAME,x(N),MAIL,x(M),br 
 ,textarea(T,'',6,80,1),endform,end_html 
179: nobodyさん [sage] 03/12/02 23:32 ID:??? AAS
 >>177 
 #!/usr/bin/perl 
 @c=('a'..'z','A'..'F');$t=time;sub j{join'',@c[$_[0]..$_[0]+2]}for(0..23){open( 
 T,'>'.($f=j($_).'.txt'))||die$!;print T j($_),"\n",j($_+3),"\n",j($_+6);utime( 
 $t,$t,$f)||die$!;$t-=25000}opendir(D,'.')||die$!;@f=grep!/^\./,sort readdir D; 
 $t=(stat$f[0])[9]-32000000;for(@f){open(S,$_)||die$!;s/^(\w+)/++$i.uc$1/e;open( 
 D,">$_")||die$!;print D map uc,<S>;utime$t,$t,$_;$t-=50000} 
180(1): nobodyさん [sage] 03/12/03 02:02 ID:??? AAS
 5.005_03 と 5.8.2 で確認。元より長くなったけど…。 
  
 #!/usr/bin/perl 
 use CGI':all';use File::Find;/^\d+$/?$y?$m?($d||=$_):($m=$_-1):($y=$_-1900):/\. 
 txt$/x?($f||=$_):length&&($c.="/$_")for split'/',path_info;find sub{($D,$M,$Y)= 
 (localtime($t=(stat)[9]))[3..5];$e{$File::Find::name}=$t if!($y&&$y-$Y)&&!($m&& 
 $m-$M)&&!($d&&$d-$D)&&(!$f||/^$f$/)&&/\.txt$/},".$c";put header,start_html;for( 
 sort{$e{$b}<=>$e{$a}}keys%e){open F,$_;s|\.||;chomp($h=<F>);put h2(a{href,url. 
 $_},$h),pre<Fhr}put end_html 
  
 ・数字は年・月・日としてこの順に拾われ、4つ目以降は無視 
 ・数字のみのカテゴリ名は許されないが、含む事は可 
 ・カテゴリは出現順に階層化されているものとして処理する 
 ・".txt" が末尾に付くものはファイルとし、最初に現れたもののみ有効 
  
 例 
 ./7blosxom.cgi 
 ./7blosxom.cgi/2003 
 ./7blosxom.cgi/2003/11 
 ./7blosxom.cgi/2003/11/30 
 ./7blosxom.cgi/foo 
 ./7blosxom.cgi/hoge.txt 
 ./7blosxom.cgi/foo/hoge.txt 
 ./7blosxom.cgi/2003/foo/bar 
 ./7blosxom.cgi/2003/foo/11/bar/30/fuga.txt 
 ./7blosxom.cgi/fuga.txt/2003/////foo1/11////bar2/30 
181: nobodyさん [sage] 03/12/03 02:13 ID:??? AAS
 >>180 
 1月ダメじゃん…。 
  
 :($m=$_-1): => :($m=$_): 
 !($m&&$m-$M) => !($m&&$m-$M-1) 
182(4): nobodyさん [] 03/12/03 06:43 ID:4m1BwtbU(1) AAS
 >175 $p の指定に不具合あり。join忘れてた。 
  
 use CGI':all';use File::Find;$P=join'/',grep/^\D\w*$/,(@i=split'/',path_info);( 
 $Y,$M,$D)=grep/^\d+$/,@i;find sub{($d,$m,$y)=(localtime($t=(stat)[9]))[3..5];!( 
 !($Y&&$Y-$y-1900)&&!($M&&$M-$m-1)&&!($D&&$D-$d)&&/\.txt/&&(!$i[-1]||/^$i[-1]$/) 
 )or$e{$File::Find::name}=$t},"./$P";put header,start_html;for(sort{$e{$b}<=>$e{ 
 $a}}keys%e){open F,$_;s/^\.//;chomp($h=<F>);put h2(a{href,url.$_},$h),pre<Fhr 
 ;close F}put end_html; 
  
 若干仕様変更。 
 - カテゴリ名は /^\D\w*$/ 
 - ファイルの指定は、PATH_INFO の末尾のみ有効。 
 - findの対象はカレントディレクトリ以下のみ。(絶対パス指定できるのは、流石にちょっと 
  
 BTW,ファイルハンドルってスコープ抜けたら勝手にcloseされるんだっけ?perlって。 
上下前次1-新書関写板覧索設栞歴
あと 270 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.016s