七行プログラミング (452レス)
上下前次1-新
66(1): 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): 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: 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: 02/11/21 22:40 ID:??? AAS
間違えた・・
s|\b([A-Z][a-z]+){2,}\b|a{href=>"7wiki.cgi?$1"},$1|ge;
70(2): 02/11/21 22:52 ID:??? AAS
括弧わすれてた・・・ゴメン(再び修正
\b(([A-Z][a-z]+){2,})\b
71(1): 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: 02/11/22 14:36 ID:??? AAS
Good job.
73: 02/11/22 18:30 ID:??? AAS
折角なので副産物も(ワンライナーだけど
れぎゅれーしょん ちぇっか usage: ./7rc.pl < target_script.pl
#! perl -nw
chomp;length>79||$.>7?die:print"line $. OK\n"
74(1): 02/11/24 15:39 ID:??? AAS
>>71
use Fcntl;
はいらないのか?
75(1): 02/11/24 17:47 ID:??? AAS
use Fcntl; O_CREAT|O_RDWR を纏めて 286(tie の引数
定数部分は環境依存するかも知れないので
/usr/include/sys/fcntl.h を参照
76: 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: 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): 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): 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): 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 02/11/26 00:51 ID:??? AAS
>>75
勉強になりました。
82: 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: 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): 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: 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): 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: 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): 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): 02/11/27 08:37 ID:??? AAS
検索エンジン
<? fopen("外部リンク:www.yahoo.co.jp");?>
90(2): 02/11/27 09:55 ID:??? AAS
>>89
Warning: fopen() expects at least 2 parameters, 1 given in ...
91: 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): 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): 02/11/28 03:23 ID:??? AAS
あっ バグ・・・今気付いた。
open が失敗した時困るかな >>92
94(1): 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: 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
上下前次1-新書関写板覧索設栞歴
あと 357 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.008s