1read 100read
2012年09月WebProg93: 七行プログラミング (448) TOP カテ一覧 スレ一覧 2ch元 削除依頼
サーバーサイドJavaScript総合 (242)
XSL/XSLT (544)
=== IIS === (289)
PostgreSQL 2テーブル目 (670)
★三 【 スクリプト改造工房 PART 9 】 ★三 (699)
【UD】白血病患者を救おう!@webprog (417)

七行プログラミング


1 :02/11/01 〜 最終レス :8)
・7行×79文字
・Perl

どうぞ。

2 :
2GET  7行だけなら 何もできない罠

3 :
while (1) { print "無理です"; }

4 :
とりあえず7行でカウンタを作ろう

5 :
無理ですの 無限ループか 怖いな

6 :
PHPやJavaScriptも入れてくれ。

7 :
#!/usr/local/bin/perl
if (>>1 = "バカ") {
print "イッテヨシ";
} else {
print "マターリしましょう";
}

8 :
#!/usr/bin/perl
my $logfile = './count.log';
my $addr = $ENV{'REMOTE_ADDR'};
open( FILE,"+<$logfile" ) or die;
flock( FILE, 2 );
( $_ = <FILE> ) =~ /^(.*?):(.*)$/;
my ( $count, $ip ) = ( $1, $2 );
$count++ if $addr ne $ip;
seek( FILE, 0, 0 );
print FILE "$count\:$addr";
truncate( FILE, tell );
close FILE;
print "Content-type: text/plain\n\n";
printf( "%.5d", $count );
exit;
自作のカウンターです。元はKENTですが原型無いです。
一応多重カウント防止、桁そろえします。
これなんとか7行にできそーなんだけど、どうでそう?

9 :
何とかも何も、変数の冗長性を残しても3行になったよ。
#!/usr/bin/perl -w
$addr=$ENV{REMOTE_ADDR};open L,"+<.log";flock L,2;($c,$ip)=split/:/,<L>;
if($addr ne$ip){$c++;seek L,0,0;print L "$c:$addr";truncate L,tell(L);print
"Content-Type:text/plain\n\n$c"}

10 :
ワーイ 3行にナッター 有難う。
まだまだperl勉強中の身ですー

11 :
と思ったらバグがあった。後半の処理全部ifブロックに入れたらダメじゃん。
しかも3行じゃなくて3行ね。
ついでに変数を短く。flockしなけりゃ3行いけるね。
#!/usr/bin/perl -w
$a=$ENV{REMOTE_ADDR};open L,"+<l";flock L,2;($c,$i)=split/:/,<L>;if($a ne$i){
$c++;seek L,0,0;print L"$c:$a";truncate L,tell L}print"Content-Type:text/plain
\n$c"

12 :
>>11
でも、読みにくいね

13 :
>>12
読みやすさを追求してるわけじゃないんだけどね
趣旨を理解してよ

14 :
ああ、; までで1行ってわけじゃないんだ。

15 :
やっぱカウンタぐらいしかできないか。

16 :
ム板かと思った。

17 :
SWFファイルからJPEGを取り出す
SWF("$ARGV[0]");
sub SWF{$file="$_[0]";open(FILE,$file);
binmode FILE;while(<FILE>){$ed=unpack("h*","$_");
if($ed=~/ff8dff0e.{2}01a46494640010/){$Wri=pack("h*","$ed");
print FILEX "$Wri";$ed=~s/.*(ff8dff0e.{2}01a46494640010)/$1/;
$c9++;print "$c9\n";$fileX="SWF$file$c9.jpg";open(FILEX,">$fileX");
binmode FILEX;}$Wri=pack("h*","$ed");print FILEX "$Wri";}}

18 :
>>8
truncate( FILE, tell );
これはどういう意味?

19 :
tell FILE
   ↑が抜けてるにょ

20 :
print <<7LINE;
*******************************************************************************
*******************************************************************************
*******************************************************************************
*******************************************************************************
*******************************************************************************
*******************************************************************************
*******************************************************************************
7LINE

21 :
>>19
( ´,_ゝ`) プッ

22 :
(; °▽°)FILEなくもいけた〜〜

23 :
echo "aho1"
echo "aho2"
echo "aho3"
echo "aho4"
echo "aho5"
echo "aho6"
echo "aho7"

24 :
掲示板でけた〜〜
#!/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>';

25 :
動きませぬ

26 :
あ、動きましたw

27 :
>>1 Perl限定かよ。

28 :
昔のBASICの1画面プログラムを思い出したよ

29 :
Dukeまだ〜? チンチン

30 :
てめーら七行もあるのにその程度のモンしか作れねーのかよ(プ

31 :
>>30
だからきみのすごい作品を待っています。ハイレベル期待しています。
もうできてる? 今からつくる? 今日中には書き込んでくれ。

32 :
すごい作品まだ〜? チンチン

33 :
何本気になってんの?

34 :



        http://plaza.rakuten.co.jp/a240a/





35 :
>>33
作れないヤツはすっこんでてね(はぁと

36 :
>>30は、口だけ大将だったということか・・・

37 :
実際、Perlだったらかなりのものが出来てもおかしくはないかと。
ム板の7行スレは凄かった。

38 :
ム板マ板で相手にされない厨が集まる板はここですか?

39 :

プランテック製の「 RX-2000V 」を改造済み
にした、アイティーエス製の「 RX-2000V 」↓
http://user.auctions.yahoo.co.jp/jp/user/neo_uuronntya#.2ch.net/
現在、本当に人気がある様です。
私も、この前、買いました。
関連ホームページ↓
http://www.h5.dion.ne.jp/~gekitoku/
http://www.h4.dion.ne.jp/~gekiyasu/
http://www.h5.dion.ne.jp/~gekirea/
http://www.h4.dion.ne.jp/~shinsetu/

40 :
WebProg らしく。
--- cgi-lib.po ---
my($m,$l,$i,$e,$x)=@ENV{'REQUEST_METHOD','CONTENT_LENGTH'};my$d=sub{$d=
"Request to receive too much data: $l bytes\n";print"Content-Type: text/plain",
"\n\n$d";die$d};sub ReadParse{$l>$$x?&$d:$m=~/POST/?($e=$l-read STDIN,$i,$l):(
$i=$ENV{QUERY_STRING});local*I=pop;my@i=(split(/[&;]/,$i),($m?():@ARGV));for(@i
){tr/+/ /;s/%([\da-f]{2})/pack'H2',$1/egi for my($k,$v)=split/=/,$_,2;$I{$k}.=
$I{$k}?"\0$v":$v}!$e&&scalar@i}${$x='cgi_lib::maxdata'}=131072
---------------
cgi-lib.pl 互換。Perl4 不可、multipart 未対応。
require 'cgi-lib.po';
$cgi_lib::maxdata = 1024; # POST 時の上限サイズ
ReadParse(*in); # or ReadParse(\%in);

41 :
名前入力欄つき掲示板
$q=$ENV{QUERY_STRING}; if($q){@p=split /[&;]/,$q; foreach(@p){($a,$b)=split
"="; $b=~tr/+/ /; $b=~s/%([A-Za-z0-9]{2})/pack("C", hex($1))/eg; $i{$a}=$b;}
open W, ">> b.log"; print W "$i{n}<>$i{m}\n"; close W;} print "Content-type:
text/html\n\n<html>\n<head><title>掲示板</title></head>\n<body>\n"; open R,
"b.log"; while(<R>){chomp; ($n,$m)=split "<>"; print "$n:$m<br>\n";} close R;
print qq{<hr>\n<form>Name<input type="text" name="n"> <input type="text"
name="m" size="64"><input type="submit"></form>\n<hr>\n</body></html>\n}; exit;

42 :
改良
$q=$ENV{QUERY_STRING}; if($q){@p=split /[&;]/,$q; foreach(@p){($a,$b)=split
"="; $b=~tr/+/ /; $b=~s/%([A-Za-z0-9]{2})/pack("C", hex($1))/eg; $i{$a}=$b;}
open W, ">> b.log"; print W "$i{n}:$i{m}\n"; close W;} print "Content-type:
text/html\n\n<html>\n<title>BBS</title>\n\n"; open R, "b.log"; while(<R>)
{chomp; print "$_<br>\n";} close R; print qq{<hr>\n<form>Name<input type="text"
name="n"> <input type="text" name="m" size="64"> <input type="submit"> [<a
href="b.cgi">Reload</a>] [<a href="../../">Back</a>]</form>\n<hr>\n</html>\n};

43 :
>>24 を発展させてみた。一行掲示板。
--- 7bbs.cgi ---
#!/usr/local/bin/perl
$l='7bbs.log';if(read STDIN,$_,$ENV{'CONTENT_LENGTH'}){for(split/&/){$_=(split
/=/)[1];tr/+/ /;s/%([a-f\d]{2})/pack'H2',$1/egi;push@r,$_}@r=(''.localtime,@r);
open F,"+<$l";flock F,2;@l=(join(': ',@r),"<br>\n",<F>);truncate F,0;print F
@l[0..49]}open F,$l;print join('><input type=',"Content-type: text/html\n\n".
'<title></title><form action=7bbs.cgi method=post','text name=n','text name=w',
'submit></form>'),<F>
----------------
新しい順に表示。50件まで保存。
>>41
ネタが被るねぇ。ゴメンね。(´・ω・`)

44 :
動かねぇです大将!>>42>>43
>>42のは半角でも全角でも変な文字が保存されるです!モジコード変えてもダメだったです!
>>43のはファイルが作成されませぬ!
私のミステイクでしょうか!ハラキリ!

45 :
>>44
open F,"+<$l"; ←注目
つー事で、ログファイルは先に作っといて。
$l='7bbs.log';
のトコがログファイルのパスだから、よろ。

46 :
1行でも書けるな。

47 :
   (  そんな事より1さん、ちょっと聞いてよ。スレとあんまり関係ないけどさ。
    `ー‐―V―――――――――――――――――――――――――――――
           ;:'´ (  このあいだ、WebProg板へ行ったんですの。WebProg板。
        _....._{{ 〃 \  そしたらなんかRuby!と書かれたレスが多発していましたわ。
      , - ' ,..、、.ヾ{{フ'⌒`ヽ、ー―――V――――――――――――――――――
    /  ,:', -‐‐` ´ '´⌒ヽ ヾ:、   _....、、、、   ( で、よく見たらrubyistという名前の書き込みで、
.   ,'   ,'´ ,ィ ,ィ ,' ,   `ヽ',  ',-<´ ,     `ヽ.`ー――――V― 相手してもらえてないんです。
    ,'   .i  /|. /.| { i,  i,  }.  }_,,)) lニ二二ミヽ.、 ':, ,.: '´ ,_.....__`ヽ、    ,..-‐-、),.....`_――――――
   ! |  ! .,'-.{ ! !|; |`、.}゙!.! |.  ! ヽ.l ./ ,!  ,,`ヾ:、 ':,  ./'´ ̄`ヾ、、ヽ,.:'´ ,:‐:、 ,.-、 ヽ.
   ', ', |Vァ=、゙、 `゙、!-_:ト,リ', l ! |   ゙レ__,〃_/リ  !.'; .} ./l_|___ノ! l `、 ',  / //`''} }.'; ',
    ヽ、', l:!Kノ}.     f:_.)i゙i: リ ! l ル' ̄`` ´-、,ノノ l l .!,;:=、`:.`:>=、.j,} |__人(( _ノノノ  |
     | l!iヾ- ' ,   .!__:ノ ゙ ,リ l リ'´ .|' ̄ヽ   __ `><ノ | {;:'ノ ノtrテ;、.Y ! ,--、   __`彡 ノ
.     ',|!!、    r‐┐   ` ノ' /,イ  !   __ , ⌒'/!| |  !.`ー‐'´, ゙じ' ノ ! h.   ._: ´ ソ).(
      'i!゙、ヽ、 ゙ー'  _, ィ,:',:''´ !  !、  ー'  ノイ ! | | !、  !フ `フ'リ ! ル'ヽ.._ _..、(ン ノ )
      ゙:、ィ、jヾー::: 'iヘ ノ',リ./! .| |ー`┬、' ´ 〃 l. トヾ、.゙`ィ'' ´ヽ、/// \二|`\ー‐‐'´
   ,、- '´ ヽ、゙、   { `>"、  !  ! !   | `>-、 | |、  ________∧_____
  /\\    ',   }   //`ヽ|  ',.!゙、 !// ゙!/  !  (  もうね、アホかと。馬鹿かと‥

48 :
明文化
・7行×79文字
・Perl
・#!/usr/local/bin/perlは含まない。実質的なプログラムで七行。
・スペースも1文字分。2バイト文字は2文字分。
でいいでしょうか?

49 :
perl版cc1だれか作れ

50 :
このスレを見たとき、
ム板かと思いますた。

51 :
掲示板は本家でもうかなり短くなってないか?
別に委員だけど、もっと面白いネタがないかなと。

52 :
>>48
プログラムが Web 関連物なら言語は何でもいいんじゃ?
シェバング行は C の #include みたいなモンだから…。
>>51
単に縮めるだけじゃなく、7行をギリギリまで使って機能増やすのも
楽しみの一つだよ。掲示板に食傷気味なのは同意するけど。(w
つー事で改良。
--- 7bbs.cgi ---
#!/usr/local/bin/perl
$l='7bbs.log';if(read STDIN,$_,$ENV{CONTENT_LENGTH}){@r=''.localtime;for(split
/&/){$_=(split/=/)[1];tr/+/ /;s/%([a-f\d]{2})/pack'H2',$1/egi;s/(["&<>])/'?'.
unpack('C',$1).';'/eg;push@r,$_}open F,"+<$l";flock F,2;@l=(join(': ',@r).
"<br>\n",<F>);truncate F,0;seek F,0,0;print F @l[0..49]}open F,$l;print join(
'><input type=',"Content-type: text/html\n\n<title>7BBS</title><form action=".
'7bbs.cgi method=post','text name=n','text name=w',"submit></form>\n"),<F>
----------------
["&<>] を数値文字参照に変換。

53 :
7行のスレッドフロート型掲示板とかは無理?

54 :
>>43
Winではflock 使えなくてエラーに ヽ(*`Д´)ノ ワァァン
>>44
ガ━━━━(;゚Д゚)━━━━ン !!
すいませn原因わかりませn
Windows環境でSJISならうまくいくんだけど・・
>>53
前に2ch型掲示板作ってみたけど、無理確定のような気がする。
誰か作れる人、いるかな

55 :
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 :
>>55
それは普通掲示板といいません(w
win鯖では動いたけどな。

57 :
やはりCGIだと、定型的な部分で多く取られてしまいますな。

58 :
[アクセス解析]
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 :
で、実用性ある奴はあるのか?

60 :
(・ε・)v キニシナイ!

61 :
HTML4.01strictとかどうよw

62 :
>>57
試しにHTMLを分離して作ってみたら大分縮んだ。
ttp://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

64 :
あげ

65 :
7行Wikiくれ。

66 :
---- 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 :
>>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 :
>>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 :
間違えた・・
s|\b([A-Z][a-z]+){2,}\b|a{href=>"7wiki.cgi?$1"},$1|ge;

70 :
括弧わすれてた・・・ゴメン(再び修正
\b(([A-Z][a-z]+){2,})\b

71 :
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 :
Good job.

73 :
折角なので副産物も(ワンライナーだけど
れぎゅれーしょん ちぇっか usage: ./7rc.pl < target_script.pl
#! perl -nw
chomp;length>79||$.>7?die:print"line $. OK\n"


74 :
>>71
use Fcntl;
はいらないのか?

75 :
use Fcntl; O_CREAT|O_RDWR を纏めて 286(tie の引数
定数部分は環境依存するかも知れないので
/usr/include/sys/fcntl.h を参照

76 :
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 :
余った行で僅かばかり実用的にしてみる。
#!/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 :
#! 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 :
< $_=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 :
< .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 :
>>75
勉強になりました。

82 :
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 :
>>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 :
書き忘れたけど、78-82 はWin/ActivePerlで作ってました。
他の環境に移したら CGI.pm 2.56 で同様のエラーが出たので
パッケージ名をつけてCGI::escapeHTMLで対応。
もしくは、モジュールを新しくする。でいいかな>対策
NOTE
QUERY_STRING を PATH_INFO に変更して
url の区切りを ? -> / に。
# 勿論、 s/// のスラッシュも他の記号に変更する。
(stat)[9]

BUG
ページ読むだけでも書き込みしてるので
タイムスタンプが。。


85 :
>>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 :
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 :
#! 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 :
#! 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 :
検索エンジン
<? fopen("http://www.yahoo.co.jp");?>

90 :
>>89
Warning: fopen() expects at least 2 parameters, 1 given in ...

91 :
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 :
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 :
あっ バグ・・・今気付いた。
open が失敗した時困るかな >>92

94 :
>>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 :
>>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 :
>>92
成る程、そういう環境もありますか。
warning 吐きまくるのはヤだなぁと思っただけなんで、
shebang line は適宜変更でいいですかのぅ。
つか valid な HTML にはあまりこだわってませんか。
URL リンクはこうかな…。
s|(http://[\w!#-;=?-@~]+)|a{href,$1},$1|eg;
>>93
困りました。:)

97 :
>困りました。:)
ごめん。パズルに夢中で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 :
>>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 :
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 が悩み処ですな。

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
Namazu全文検索システム (365)
【PHP】PEAR Part3 (673)
【毒】 DokuWiki 総合スレ 【毒】 (376)
【PHP】下らねぇ質問はID出して書き込みやがれ 123 (710)
ショッピングカート総合スレ (416)
PostgreSQL 2テーブル目 (670)
--log9.info------------------
[ ● ]ヘタリアの日本に萌えるスレ 伍拾参 (596)
銀魂の志村妙(お妙さん)萌えスレ20 (434)
【らき☆すた】田村ひよりは〜っス可愛い1 (469)
【らき☆すた】小神あきら様に萌えるスレ10 (822)
【家出するなら】ツナたんにネッチョリ課外授業!!30弾目【嫁にこい】 (890)
新テニスの王子様 白石蔵之介アンチスレ3 (591)
【頭が高い】黒子のバスケ 赤司征十郎 2勝目【絶対は僕だ】 (357)
【咲-Saki-】姫松高校総合スレッド4【清老頭】 (247)
To LOVEる-とらぶる- 西連寺春菜萌えpart75 (916)
【らんま1/2】天道あかねちゃん大好きな人が集うスレ17 (445)
【テニプリ】橘さんと千歳応援スレ【九州2ザコ】 (618)
【めだかボックス】阿久根高貴を語るスレ 7 (611)
【ジョジョ】ディアボロとドッピオの奇妙なとぉるるる【5部】12 (499)
To LOVEる-とらぶる-の古手川唯に萌えるスレ93 (833)
【らんま1/2】天道あかね&信者アンチスレ【DVヒス女】 (956)
【HUNTER×HUNTER】フェイタン萌えスレ4【許されざる者】 (392)
--log55.com------------------
実質14053
☆【画像】6045
実質なんでも151
Jざつ680
(出禁厳守)あんころ餅よんさんじゅう
別館★羽生結弦&オタオチスレ13096
銀魂なんでも雑談409【ホモノマ百合】
肴27179