七行プログラミング (452レス)
上下前次1-新
54: ◆FruitsMIpE 02/11/03 23:44 ID:??? AAS
>>43
Winではflock 使えなくてエラーに ヽ(*`Д´)ノ ワァァン
>>44
ガ━━━━(;゚Д゚)━━━━ン !!
すいませn原因わかりませn
Windows環境でSJISならうまくいくんだけど・・
>>53
前に2ch型掲示板作ってみたけど、無理確定のような気がする。
誰か作れる人、いるかな
55(1): 02/11/04 06:56 ID:5+umhhBG(1)調 AAS
7行2ch型掲示板
ただし、かちゅ〜しゃがないとだめぽ、
read.cgiがないから読めないし、書きこみフォームもないから、あとsubject.txtの新スレは一番下になる。
flockもしていない、かちゅに依存するために変数名が長い。
下記のディレクトリ構成で成功
/test
+--/bbs.cgi
+--/subject.txt
+--/dat/
#!/usr/local/bin/perl
$t=time;read(STDIN,$b,$ENV{'CONTENT_LENGTH'});@p=split(/&/,$b);foreach (@p)
{($a,$v)=split "=";$v=~tr/+/ /;$v=~s/%([A-Za-z0-9]{2})/pack("C", hex($1))/eg;
$i{$a}=$v;}if(!$i{'key'}){$i{'key'}=$t;}open(F,">>./dat/$i{'key'}.dat");
print F "$i{'FROM'}<>$i{'mail'}<>$t<>$i{'MESSAGE'}<>$i{'subject'}\n";close(F);
open(S,">>./subject.txt");print S "$i{'key'}.dat<>$i{'subject'}(1)\n";
close(S);exit;
つーか激しく2ch型から離れているが。
56: 02/11/04 09:38 ID:??? AAS
>>55
それは普通掲示板といいません(w
win鯖では動いたけどな。
57(1): 02/11/04 12:16 ID:??? AAS
やはりCGIだと、定型的な部分で多く取られてしまいますな。
58(1): ( ´∀`)でけた〜 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}
59: 02/11/04 14:26 ID:??? AAS
で、実用性ある奴はあるのか?
60(2): 02/11/04 15:47 ID:CMvXGJGy(1)調 AAS
(・ε・)v キニシナイ!
61: 02/11/04 20:59 ID:??? AAS
HTML4.01strictとかどうよw
62: 02/11/04 23:14 ID:??? AAS
>>57
試しにHTMLを分離して作ってみたら大分縮んだ。
http://boobar.hp.infoseek.co.jp/7bbs2/7bbs2_0.0.1.tar.gz
>>58
縮めてみた。
#!/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: 02/11/14 07:16 ID:M/ZRCXHw(1)調 AAS
あげ
65: 02/11/20 18:28 ID:707UhyRv(1)調 AAS
7行Wikiくれ。
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 要るかどうかしらないけど、個人的には欲しい。
# http://c2.com/cgi/wiki?LinkPattern
> 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・・・他に、こんなのもあるよ。
http://c2.com/cgi/wiki?ShortestWikiContest
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("http://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
96: 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): 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): 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): 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): 02/11/29 08:04 ID:??? AAS
rename の仕方:
変更したいファイルにチェック、textfield に変更後の名前を入れて MV
101(1): 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] 等の親要素が必要
等々、新たな課題が出てくるんじゃないかな?
102(1): 02/11/29 09:30 ID:??? AAS
動作チェックしてないけど。
use File::Copy;
sub cp{ map{ -f$_&©($_,"copy_of_$_") }p(F) }
103: 02/11/29 11:06 ID:??? AAS
>>101
ありゃ。本当に全然拘ってなかったのね。w
なら 3 文字加えてピッタリ 6x79 。
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"),p(textarea(z,$m,6,60),br,submit),endform,hr,$_,end_html
・hr はブロック要素なので無問題。
・form 内の各要素がインライン要素なので p で囲む。
・textarea の属性値クォートは 7wiki.cgi 側でなく CGI.pm 側の
問題だし、最近の CGI.pm なら直ってるので考えない。w
これでかなり valid.
104: 02/11/29 11:54 ID:??? AAS
>>102
そか…モジュールという手が…。(´Д`;
use CGI':all';use File::Copy;$d=path_info;($c=$f=script_name)=~s|/[^/]+$||;*p=*
param;opendir D,$e=".$d/";$F=p(F);$N=$e.p(N);$w=($_=p(S))=~/MV/?rename$F,$N:/CP
/x?copy$F,$N:/RM/?unlink$F:1;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
copy の仕方も rename と一緒。
105: 02/11/30 03:07 ID:??? AAS
> ありゃ。本当に全然拘ってなかったのね。w
えぇ。行末の桁揃えに夢中だったので。。w
use CGI':all';use File::Copy;$d=path_info;*p=*param;opendir D,$e=".$d/";$F=p(F)
;$N=$e.p(N);($_=p(S))=~/MV/?move$F,$N:/CP/?copy$F,$N:/RM/?unlink p(F):1;($c=$f=
script_name)=~s|/[^/]+$||;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,(
white,silver)[$t^=1]},[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 --> File::Copy#move に変更。
ファイルをチェックして、テキストにディレクトリ名を入れてMVで
ファイルをディレクトリに移動します。
= TODO
mkdir, rmdir
106: 02/12/01 01:22 ID:??? AAS
mkdir, rmdir 実装。特にヒネりもなく…。
use CGI':all';use File::Copy;$d=path_info;($c=$f=script_name)=~s|/[^/]+$||;*p=*
param;opendir D,$e=".$d/";$F=p(F);$N=$e.p(N);$_=p(S);/MV/?move$F,$N:/CP/?copy$F
,$N:/RM/?unlink$F:/MD/?mkdir$N,511:/RD/?rmdir$F:1;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,(white,silver)[$t^=1]},[checkbox(F,0,".$i",''),a({href,$l},
$_),$s,"".localtime((stat)[9])])}sort grep!/^\./,readdir D]),textfield(N),map(
submit(S,$_),MV,CP,RM,MD,RD),endform,end_html
table を何とかせんと、劇的には縮まらな気。
107: 02/12/01 05:42 ID:??? AAS
bgcolorを削って、chdirにしてみた・・
use CGI':all';use File::Copy;$d=path_info;*p=*param;chdir".$d";$N=p N;$F=p F;$_
=p S;/MV/?move$F,$N:/CP/?copy$F,$N:/RM/?unlink$F:/MD/?mkdir$N,511:/RD/?rmdir$F:
1;opendir D,".";($c=$f=script_name)=~s|/[^/]+$||;put header,start_html('7files'
),startform(0,$f.$d),table(Tr[map{td[checkbox(F,0,$_,''),a({href,-d$_?"$f$d/$_"
:"$c$d/$_"},$_),-s||DIR,"".localtime((stat)[9])]}sort grep!/^\./,readdir D]),
textfield(N),map(submit(S,$_),MV,CP,RM,MD,RD),endform,end_html
p(F); を p F; って表記するのも環境/バージョンに依存するのかな?
108(1): 02/12/01 07:42 ID:??? AAS
give up 気味。(´Д`;
use CGI':all';use File::Copy;$d=path_info;*b=*param;chdir".$d";$N=b N;$F=b F;%m
=qw(MV move$F,$N CP copy$F,$N RM unlink$F MD mkdir$N,511 RD rmdir$F);eval$m{b S
};opendir D,".";($c=$f=script_name)=~s|/[^/]+$||;put header,start_html('7files'
),startform(0,$f.$d),table(Tr[map{td[checkbox(F,0,$_,''),a({href,(-d$_?$f:$c).
"$d/$_"},$_),-s||DIR,"".localtime((stat)[9])]}sort grep!/^\./,readdir D]),
textfield(N),(map{submit S,$_}keys%m),endform,end_html
param のエイリアスを b にしたのは、p 要素の p() を
使えるようにする為の布石。
> p(F); を p F; って表記
大丈夫っぽいです。
109(1): 02/12/01 08:40 ID:??? AAS
ディレクトリは別にサイズ取れない訳じゃないので
-s||DIR は駄目ですな…。
110: 02/12/01 12:51 ID:??? AAS
>109
Win/ActivePerlだとディレクトリのサイズ0が返ってきていた
これも環境に依存するのか。。 -d _?DIR:-s _ でok ?
use CGI':all';use File::Copy;$_='$d=path_info;*b=*param;chz".$d";$N=b N;$F=b F;
%m=qw(MV move$F,$N CP copy$F,$N RM unlink$F MD mkz$N,511 RD rmz$F);eval$m{b S}
;openz D,".";($c=$f=script_name)=~s|/[^/]+$||;put header,start_html("7files")
,startform(0,$f.$d),table(Tr[map{td[checkbox(F,0,$_,""),a({href,(-d$_?$f:$c)
."$d/$_"},$_),-d _?DIR:-s _,"".localtime((stat)[9])]}sort grep/^[^.]/,readz
D]),textfield(N),(map{submit S,$_}keys%m),endform,end_html';s/z/dir/g;eval
置換してスクリプト長くなってるし。。。そろそろ give up
>108 のファイルサイズを直して、完成かな
111: 02/12/01 14:28 ID:??? AAS
せっかくだから空ファイル作成 (MF) など付けてみる。
use CGI':all';use File::Copy;$d=path_info;*b=*param;chdir".$d";$N=b N;$F=b F;%m
=(qw(MV move$F,$N CP copy$F,$N RM unlink$F MD mkdir$N,511 RD rmdir$F MF),'open
F,">$N"');eval$m{b S};opendir D,".";($c=$f=script_name)=~s|/[^/]+$||;put header
,start_html("7files"),startform(0,$f.$d),table(Tr[map{td[checkbox(F,0,$_,""),a(
{href,(-d$_?$f:$c)."$d/$_"},$_),-d$_?DIR:-s,"".localtime((stat)[9])]}sort grep!
/^\./,readdir D]),p(textfield(N),map{submit S,$_}keys%m),endform,end_html
112: 02/12/02 07:11 ID:??? AAS
Rss出力と検索機能 4 7wiki.cgi
---- 7search.cgi
use CGI':all';$f=script_name;$s=param S;opendir D,".";if($s){map{$t=$_;if(open
F,$t){eval{flock F,2};while(<F>){chomp;if(/\Q$s\E/io){push(@r,li(a{href,$t},$t)
," - $_");last}}close F}}sort grep/^[^.]+$/,readdir D}put header,start_html(
'7search'),startform(0,$f),p(textfield(S),submit),endform,hr,ul(@r),end_html
---- 7rss.cgi
use CGI qw/:all channel item textinput link name/;($p)=script_name=~m|(.+)/[^/]
+$|x;$s=server_name.$p;opendir D,".";$w='7wiki';put"Content-type:text/xml\n\n",
qq|<?xml version="1.0"?>\n<rdf:RDF xmlns:rdf="http://www.w3c.org/1999/02/22-r|,
q|df-syntax-ns#" xmlns="http://my.netscape.com/rdf/simple/0.9/">|,channel(title
($w),link"$s/$w.cgi"),(map{item(title($_),link"$s.$_")."\n"}sort grep/^[^.]+$/,
readdir D),textinput(title($w),link("$s/7search.cgi"),name(S)),"\n</rdf:RDF>";
# CGI.pm v2.69 以降 or c2.67 wiz xhtml tag
- link() の動作がちょっと不安。
113: 02/12/02 07:39 ID:??? AAS
7rss.cgi
> item(title($_),link"$s.$_")."
< item(title($_),link"$s.cgi/$_")."
114: 02/12/02 08:06 ID:??? AAS
#7search.cgi - v0.02 fixed some bugs
use CGI':all';($c=$f=script_name)=~s|/[^/]+$||;$s=param S;if($s){opendir D,".";
map{$t=$_;if(open F,$t){eval{flock F,2};while(<F>){chomp;if(/\Q$s\E/io){push@r,
li(a({href,"$c/7wiki.cgi/$t"},$t)," $_");last}}close F}}sort grep/^[^.]+$/,
readdir D}put header,start_html('7search'),startform(0,$f),p(textfield(S),
submit),endform,hr,ul(@r),end_html
#7rss.cgi - v0.02 show latest 15 articles
use CGI qw/:all channel item textinput link name/;($p)=script_name=~m|(.+)/[^/]
+$|x;$s=server_name.$p;opendir D,".";$w='7wiki';put"Content-type:text/xml\n\n",
qq|<?xml version="1.0"?>\n<rdf:RDF xmlns:rdf="http://www.w3c.org/1999/02/22-r|,
q|df-syntax-ns#" xmlns="http://my.netscape.com/rdf/simple/0.9/">|,channel(title
($w),link"$s/$w.cgi"),(map{item title($_),link"$s.cgi/$_"}sort{-M$a<=>-M$b}grep
/^[^.]+$/,readdir D)[0..14],textinput(title($w),link("$s/7search.cgi"),name S),
"\n</rdf:RDF>";
115: 02/12/02 17:31 ID:??? AAS
# 7rss.cgi v0.03
use CGI qw/:all channel item textinput link name/;opendir D,".";$w='7wiki';($p)
=url=~m|^(.+)/[^/]+$|;put header('text/xml'),qq|<?xml version="1.0"?>\n<rdf:RD|
,'F xmlns:rdf="http://www.w3c.org/1999/02/22-rdf-syntax-ns#" xmlns="http://my.'
,'netscape.com/rdf/simple/0.9/">',channel(title($w),link"$p/$w.cgi"),(map{item
title($_),link"$p/$w.cgi/$_"}sort{-M$a<=>-M$b}grep/^[^.]+$/,readdir D)[0..14],
textinput(title($w),link("$p/7search.cgi"),name S),"\n</rdf:RDF>";
116: 02/12/21 03:14 ID:RF/wn3c8(1)調 AAS
7threadキボンヌ
117(1): 02/12/30 09:38 ID:??? AAS
拙作をまとめていた isweb のサイト、広告ウザいので引っ越し。
ついでに配布体裁整え。http://calorymate.s15.xrea.com/
7wiki と 7files 、参加作という事でサイトに載っけていいですか?
118: 'a';$happy = new Year; 02/12/31 15:36 ID:??? AAS
>>117
Take It free.
<一応、ベースとなるものを書いたモノです
自分が代表してレスしていいのかわかんないけど &&
このスレッド的にはどうなのか知らないけど・・・、
このまま過去ログに埋もれて日の目を見ないよりも、
公開して保守して貰えるのなら、そっちの方がいいよな
て事でお願いします。
ついでに、7rss, 7search も載せてもらえるとうれしいな。
package Year;sub new{bless{},shift}
119: 03/01/15 02:35 ID:??? AAS
忘れた頃に。(w
--- 7search.cgi
use CGI':all';put header,start_html('7search'),startform(0,$_=script_name),p(
textfield(S),submit),endform,hr;if($s=param S){m|/[^/]+$|;$c=$`;opendir D,".";
for(sort grep/^\w+$/&-f,readdir D){if(open F,$t=$_){eval{flock F,2};/\Q$s\E/io
&&push(@r,li(a({href,"$c/7wiki.cgi/$t"},$t)," $_"))&&next while<F>;}}@r&&put ul
@r}put end_html
--- 7rss.cgi
use CGI qw/:all channel item textinput link name/;opendir D,".";$w='7wiki';url
=~m|[^/]+$|;$p=$`;put header('text/xml'),join"\n",'<?xml version="1.0"?>',
'<rdf:RDF xmlns:rdf="http://www.w3c.org/1999/02/22-rdf-syntax-ns#" xmlns="http'
.'http://my.netscape.com/rdf/simple/0.9/">',channel(title($w),link"$p$w.cgi"),(map{
item title($_),link"$p$w.cgi/$_"}sort{-M$a<=>-M$b}grep/^\w+$/&-f,readdir D)[0..
14],textinput(title($w),link($p.'7search.cgi'),name S),'</rdf:RDF>'
つー事で載せときました。
120: 山崎渉 [(^^)sage] 03/01/15 13:41 ID:??? AAS
(^^)
121: 03/01/17 18:30 ID:??? AAS
2ch の dat ファイル (かちゅ〜しゃのログ) を XHTML ファイルに変換。
http://cm.xrea.cc/kat2xhtml.shtml
$s="kat2xhtml.tmpl";sub a{'<a href="'.pop().'</a>'}sub p{'<span class="'.pop().
'</span>'}while(<>){($n,$m,$d,$_,$t,$")=split/,/;$.-1||($T=$t)=~s/\s+$//;$n=$n
=~m|^<b>([^<]*)</b>(?:([^<]*)<b></b>)?$|?p"n\">$1":'';$n.=p"m\">$2"if$2;$n=$m=~
/\@/?a"mailto:$m\">$n":$m=~/./?p qq|k" title="$m">$n|:$n;s/\x81\x97\x81\x4D/,/g
;s/\s+(?:target="_blank"|$)//g;s|\s*<br>|<br />|g;s/&(?![a-z]+;)/&/g;for(@r
=split/(<a href="[^"]+">[^<]+<\/a>)/){(($u,$a)=m|^<a href="([^"]+)">([^<]+)</a>
$|x)?($u=~s/~/%7E/g&&($_=a"$u\">$a"),$a=~/^>>(\d+)/&&($_=a"#R$1\">$a")):
s/"/"/g}$A.="<dt>$. :<a id=\"R$.\">$n :$d</a></dt><dd>@r</dd>\n"}if(open
T,$s){$/='';$_=<T>;s/\%(.)/${$1}/g;print}
機能減らさないと七行に収まらないかなぁ。
122(2): 03/03/10 02:24 ID:drTO4vMw(1)調 AAS
使い方わからなかったけど…(かちゅーしゃのログ持っていないので。
'<a href="'.pop().'</a>
↓
"a href=\"$_[0]</a>"
123: 山崎渉 [(^^)] 03/03/13 17:04 ID:??? AAS
(^^)
124: 03/03/13 18:58 ID:??? AAS
このスレの dat 上げといたんでテストする人はどぞ。
http://cm.xrea.cc/thread/1036141603.dat
>>122
@_ でもいいですね。
$s="kat2xhtml.tmpl";sub a{"<a href=\"@_</a>"}sub p{"<span class=\"@_</span>"}
while(<>){($n,$m,$d,$_,$t,$")=split/,/;$.-1||chomp($T=$t);$n=~m|<b>([^<]*)(?:
</b>([^<]*))?|x;$n=($1&&p"n\">$1").($2&&p"m\">$2");$n=p qq|k" title="$m">$n|if
$m.0;s/\x81\x97\x81\x4D/,/g;s/\s+(?:target="\w*"|$)//g;s|\s*<br>|<br />|g;s/&
(?![a-z]+;)/&/gx;for(@r=split/(<a href="[^"]+">[^<]+<\/a>)/){(($u,$a)=
/^<a href="([^"]+)">([^<]+)/)?($_=$u=~s/~/%7E/g?a"$u\">$a":$a=~/^(?:>){1,2}
(\d+)/x?a"#R$1\">$a":$_):s/"/"/g}$A.="<dt>$. :<a id=\"R$.\">$n :$d</a>".
"</dt><dd>@r</dd>\n"}if(open T,$s){$/='';$_=<T>;s/\%(.)/${$1}/g;print}
mailto: やめてあと一行。
125: 通りすがり 03/03/25 06:39 ID:??? AAS
このすれ見て
ish思い出しますた
126: 山崎渉 [(^^)] 03/04/17 12:25 ID:??? AAS
(^^)
127: ◆PAmX3cjLtw 03/04/18 14:01 ID:yrVQyLZr(1/2)調 AAS
こんなスレあったんだ。燃えてきた!
128(8): ◆PAmX3cjLtw 03/04/18 15:48 ID:yrVQyLZr(2/2)調 AAS
俺も作ってみた。
2chモドキの掲示板です。ログファイル F が必要。
URLと、発言番号への自動リンクがありますが、使い物になるかどうか・・・。
Win98のPWSとLinuxのApacheで動作を確認しました。。。
------------ 7ch.cgi -----------------
#!/usr/bin/perl
use CGI':all';*i=*param;$n=i N;$m=i M;$t=i T;open F,'+<F';eval{flock F,2};1 for
<F>;$.++;if($t){$_=$t;s/</</g;$h='<a href=';s!(https?http://.+?)$!$h$1>$1</a>!mg
;s!>>(\d+)!$h#$1>>>$1</a>!g;s/\n/br/eg;seek F,0,2;print F dt("$. :".b(a{href=>
$m?"mailto:$m":undef,name=>$.},$n||='名無しさん'),':'.localtime),(dd $_.br.br)
."\n"}seek F,0,0;*x=*textfield;print header(-charset=>''),start_html(-style=>'
body{background:#eee}b{color:green}').startform,dl(<F>),hr,submit('書き込む'),'
名前:',x(N),' E-mail:',x(M),br,textarea(T,'',5,70,1),endform.end_html;
--------------------
結構つかれた・・・。
129: 03/04/18 16:33 ID:??? AAS
すげぇ…
130(1): 03/04/19 00:20 ID:??? AAS
>>128
日本語まともに表示できるようにしたら、URL リンク外してもはみだしちゃった。
#!/usr/bin/perl
use CGI':all';open F,'+<F';eval{flock F,2};[<F>];$.++;*i=*param;if($_=i T){s/<
/&lt;/gx;$h='<a href="';s!(&gt;&gt;\d+)!$h#R$1">$1</a>!g;s/\n/br/eg;$m=i M;seek
F,0,2;print F dt("$. :".b(a{name=>"R$.",$m&&(href=>"mailto:$m")},i(N)||
'名無しさん'),':'.localtime),dd($_.br.br),"\n"}*x=*textfield;$c='Shift_JIS';
seek F,0,0;put header(-charset=>$c),start_html(-encoding=>$c,-lang=>'ja',
-style=>'body{background:#eee}b{color:green}'),dl(<F>),hr,startform,p(submit(
'書き込む'),' 名前:',x(N),' E-mail:',x(M),br,textarea(T,'',5,70,1)),endform,
end_html
CGI.pm は 2.91 と 2.46 で確認。&を戻して使って下され。
131(1): 03/04/19 04:23 ID:??? AAS
収まった。
#!/usr/bin/perl
use CGI':all';open F,'+<F';[<F>];$.++;*i=*param;s!(&gt;&gt;)(\d+)!'<a href="#R'
."$2\">$1$2</a>"!eg,s/\n/br/eg,seek(F,0,2),eval{flock F,2},print F dt("$. :".b
(a{name,"R$.",($m=i M)&&(href,"mailto:$m")},i(N)||'nobodyさん'),':'.localtime)
,dd($_.br.br),"\n"if$_=escapeHTML i T;*x=*textfield;$c='Shift_JIS';seek F,0,0;
put header(-charset=>$c),start_html(-encoding=>$c,-lang=>'ja',-style=>'b{color:
green}body{background:#eee}'),dl(<F>),hr,startform,p(submit('書き込む'),' 名前'
.':',x(N),' E-mail:',x(M),br,textarea(T,'',5,70,1)),endform,end_html
escapeHTML 使ったから、CGI.pm v2.46 だと不可。
132: ◆PAmX3cjLtw 03/04/19 12:39 ID:S+81Ncm0(1/2)調 AAS
>>131
修正ありがとう!勉強になります。
httpへの自動リンクも入れてみたけど、p抜かしたりズルしてます。
【今後の課題】
・キャップもどき追加(s/#.*/crypt$&,'◆'/e)
・全角小文字のkが文字化けするバグ
use CGI':all';open F,'+<F';[<F>];$.++;*i=*param;s!>>(\d+)!a{href,"#R$1"},
$&!eg,s!https?http://.+?$!a{href,$&},$&!emg,s/\n/br/eg,seek(F,0,2),eval{flock F,2},
print F dt("$. :".b(a{name,"R$.",($m=i M)&&(href,"mailto:$m")},i(N)||'nobody'.
'さん'),':'.localtime),dd($_.p),"\n"if$_=escapeHTML i T;*x=*textfield;seek F,0
,0;put header(-charset=>$c='Shift_JIS'),start_html({lang,'ja',encoding,$c,Style
,'b{color:#080}body{background:#eee}'}),dl(<F>),hr,startform,submit('書き込む')
,' 名前:',x(N),' E-mail:',x(M),br,textarea(T,'',6,70,1),endform,end_html
133: 動画直リン 03/04/19 12:40 ID:PZJVQOkw(1)調 AAS
http://www.agemasukudasai.com/movie/
134: ◆PAmX3cjLtw 03/04/19 12:41 ID:S+81Ncm0(2/2)調 AAS
すまそ。&置換するの忘れました。
use CGI':all';open F,'+<F';[<F>];$.++;*i=*param;s!&gt;&gt;(\d+)!a{href,"#R$1"},
$&!eg,s!https?http://.+?$!a{href,$&},$&!emg,s/\n/br/eg,seek(F,0,2),eval{flock F,2},
print F dt("$. :".b(a{name,"R$.",($m=i M)&&(href,"mailto:$m")},i(N)||'nobody'.
'さん'),':'.localtime),dd($_.p),"\n"if$_=escapeHTML i T;*x=*textfield;seek F,0
,0;put header(-charset=>$c='Shift_JIS'),start_html({lang,'ja',encoding,$c,Style
,'b{color:#080}body{background:#eee}'}),dl(<F>),hr,startform,submit('書き込む')
,' 名前:',x(N),' E-mail:',x(M),br,textarea(T,'',6,70,1),endform,end_html
135(3): 03/04/19 12:54 ID:??? AAS
ライブラリをつかってよいのなら、主要な処理はライブラリに書けば数文字でかけますね。
136(2): 03/04/19 21:11 ID:??? AAS
>>135
個人的にはモジュール不可派だけど、WebProg だし
標準モジュールだけ使用可にした方が面白いものが
出てきそうな気がするのでそういう縛りで考えてるよ。
137(2): ◆PAmX3cjLtw 03/04/20 02:19 ID:??? AAS
encoding をハズしてなんとかイけたよ。疲れた。
まとめ&使い方
・番号自動リンク( >>100 とか入力する)
・URL自動リンク(http://...行末までリンク)
・キャップ(名前欄の # 以降をcryptします)
・EUC-JP で保存する(じゃないと文字化けする)
・&を&に置換する
・カレントに空ファイル F を作ること
------------------------------- 7ch.cgi
use CGI':all';open F,'+<F';[<F>];$.++;*i=*param;s!&gt;&gt;(\d+)!a{href,"#R$1"},
$&!eg,s!https?http://.+?$!a{href,$&},$&!emg,s/\n/br/eg,seek(F,0,2),eval{flock F,2},
($n=i(N)||'nobodyさん')=~s/#.*/crypt$&,'◆'/e,print F dt("$. :".b(a{name,"R$."
,i(M)&&(href,'mailto:'.i M)},font{color,'green'},$n),':'.localtime),dd($_.p),"
"if$_=escapeHTML i T;seek F,0,0;*x=*textfield;put header(-charset=>'EUC-JP'),
start_html({lang,'ja',bgcolor,'#efefef'}).dl(<F>),startform,p(submit('書き込む'
),' 名前:',x(N),' E-mail:',x(M),br,textarea(T,'',6,70,1)),endform,end_html;
138: [i] 03/04/20 04:52 ID:??? AAS
縮めるならロックなんてしなくてもよいだろ。
139: 03/04/20 04:57 ID:??? AAS
>>137
・改行しないとレス番が2以上に増えない。
・Mozilla 1.3 だと font では色変わらんかったんで、CSS に戻し。
・> 一個でリンク。
use CGI':all';open F,'+<F';[<F>];seek F,0,2;*i=*param;s!&gt;(\d+)!a{href,"#R$1"
},$&!eg,s!https?http://.+$!a{href,$&},$&!emg,s/\n/br/eg,eval{flock F,2},($n=i(N)||
'nobodyさん')=~s/#.+/crypt$&,'◆'/e,print F dt(++$.,':'.b(a{name,"R$.",i(M)&&(
href,'mailto:'.i M)},$n),':'.localtime),dd($_.p),"\n"if$_=escapeHTML i T;seek
F,0,0;*x=*textfield;put header(-charset=>'EUC-JP'),start_html({lang,ja,Style,
'b{color:#080}body{background:#eee}'}),dl(<F>),hr,startform,p(submit('書き込む'
),' 名前:',x(N),' E-mail:',x(M),br,textarea(T,'',6,70,1)),endform,end_html
>>130 での変更は HTML 的に正しくする為のものなんだけど
(文字コードや言語を指定するから化けずに済む)、そーゆーの
より「似せる」方を重視してるのかな?
140(1): 山崎渉 [(^^)sage] 03/04/20 05:57 ID:??? AAS
∧_∧
( ^^ )< ぬるぽ(^^)
141: 03/05/09 00:09 ID:seZLVSXV(1)調 AAS
∩(゚∀゚∩)age
142(1): 03/05/09 21:42 ID:??? AAS
えぇと、みんななんか面白そうなコトやってるね。
俺も参加しよう思ったけど…読めない所が多いや。
143: 03/05/10 00:35 ID:??? AAS
>>142
過疎スレだから、分からんトコは*自分で調べた上で*
適宜質問してくれれば良いかと。
144: 山崎渉 [(^^)] 03/05/22 02:04 ID:??? AAS
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
145(2): 03/05/28 05:53 ID:dphN6O/1(1)調 AAS
ポートスキャナー。
# portscan.pl
use Socket;$h=$ARGV[0];$p=--$ARGV[1];$e=$ARGV[2];$i=inet_aton($h)||die;print"ho
st $h\n\n";while($p++<$e){$f=1;for(1..2){$t=$f?"tcp":"udp";socket(S,PF_INET,
SOCK_STREAM,getprotobyname($t));print"$p $t\n"if connect(S,pack_sockaddr_in($p,
$i));close(S);$f=0}}
usage >peal portscan.pl [host] [start_port] [end_port]
ちなみに、エラーチェックもしてないし、socketらへんもかなり適当なので動かないかもしれますん。
そんときは自分で手を加えるなりして動くようにしてください。
146: 03/05/28 06:12 ID:u3FXwnkV(1)調 AAS
(´―`)y━~~タバコ代上がるのイヤー
http://www.k-514.com/good/dxlive.html
http://www.k-514.com/good/hgmo.html
http://www.k-514.com/good/jgirlpa.html
http://www.k-514.com/good/tokyonights.html
http://www.k-514.com/good/tokyonights.html
http://www.k-514.com/good/erox.html
http://www.k-514.com/good/goa.html
http://www.k-514.com/good/caribeancom.html
http://www.k-514.com/good/1pondou.html
http://www.k-514.com/good/osikko.html
http://www.k-514.com/good/beikoku.html
(´―`)y━~~タバコ代上がるのイヤー
147(1): 145 03/05/28 19:26 ID:MVa2hSnY(1)調 AAS
縮まった。
# portscan.pl
use Socket;$h=$ARGV[0];$p=--$ARGV[1];$i=inet_aton $h||die;print"host $h\n\n";
while(++$p<$ARGV[2]){$f=1;for(1..2){socket S,PF_INET,SOCK_STREAM,getprotobyname
($f?"tcp":"udp");print"$p $t\n"if connect S,pack_sockaddr_in($p,$i);close S;$f=
0}}
>>145と同じ理由で動かないかもしれますん。
これ以上縮まらないヨカソ…。
148: 03/05/28 20:05 ID:Edz5ugJ5(1)調 AAS
>>147
板違い
149: 145 03/05/28 21:50 ID:RXOOGbeu(1)調 AAS
言ってるそばから縮まった。
# portscan.pl
use Socket;@t=@ARGV;$p=--$t[1];$i=inet_aton $t[0]||die;print"host $t[0]\n\n";
while(++$p<$t[2]){$f=1;for(1..2){socket S,PF_INET,SOCK_STREAM,getprotobyname($f
?"tcp":"udp");print"$p $t\n"if connect S,pack_sockaddr_in($p,$i);close S;$f=0}}
150: 03/05/29 12:44 ID:??? AAS
use Socket;($h,$s,$e)=@ARGV;$i=inet_aton($h)||die;print"host $h\n\n";for$p($s..
$e){for('tcp','udp'){socket S,PF_INET,SOCK_STREAM,getprotobyname$_;print"$p $_
"if connect S,pack_sockaddr_in$p,$i;close S}}
151: 03/07/01 18:25 ID:??? AAS
#!/usr/local/bin/perl
print "Hello World!";
print "Hello World!";
print "Hello World!";
print "Hello World!";
print "Hello World!";
print "Hello World!";
152: 03/07/06 12:17 ID:??? AAS
お前ら!すごいですね
153: 山崎 渉 [(^^)] 03/07/15 11:13 ID:??? AAS
__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
上下前次1-新書関写板覧索設栞歴
あと 299 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.027s