2ch勢いランキング 全部 1- 最新50

七行プログラミング


nobodyさん [] 02/11/01 18:06:umVq3FGM
・7行×79文字
・Perl

どうぞ。
マリモーマ ◆jbBCmetwgw [] 02/11/01 18:28:HKLNcbVm
2GET  7行だけなら 何もできない罠
◆FruitsMIpE [sage] 02/11/01 18:36ID:???
while (1) { print "無理です"; }
nobodyさん [] 02/11/01 18:39:oU5vKkbM
とりあえず7行でカウンタを作ろう
マリモーマ ◆jbBCmetwgw [] 02/11/01 18:39:HKLNcbVm
無理ですの 無限ループか 怖いな
nobodyさん [sage] 02/11/01 18:50ID:???
PHPやJavaScriptも入れてくれ。
nobodyさん [0] 02/11/01 18:52ID:???
#!/usr/local/bin/perl

if ( = "バカ") {
print "イッテヨシ";
} else {
print "マターリしましょう";
}
nobodyさん [sage] 02/11/01 19:29ID:???
#!/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行にできそーなんだけど、どうでそう?
◆hMJAPH9PWA [sage] 02/11/01 19:43ID:???
何とかも何も、変数の冗長性を残しても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"}
nobodyさん [sage] 02/11/01 19:53ID:???
ワーイ 3行にナッター 有難う。
まだまだperl勉強中の身ですー
◆hMJAPH9PWA [sage] 02/11/01 20:47ID:???
と思ったらバグがあった。後半の処理全部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"
nobodyさん [sage] 02/11/01 21:11ID:???

でも、読みにくいね
nobodyさん [age] 02/11/01 21:44ID:???


読みやすさを追求してるわけじゃないんだけどね
趣旨を理解してよ
nobodyさん [sage] 02/11/01 22:14ID:???
ああ、; までで1行ってわけじゃないんだ。
nobodyさん [ ] 02/11/01 22:27ID:???
やっぱカウンタぐらいしかできないか。
nobodyさん [sage] 02/11/01 23:05ID:???
ム板かと思った。
rubyist@カラアゲうまうま [sssss] 02/11/01 23:14ID:???
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";}}
nobodyさん [ ] 02/11/01 23:58ID:???

truncate( FILE, tell );
これはどういう意味?
nobodyさん [sage] 02/11/02 00:07ID:???
tell FILE
   ↑が抜けてるにょ
nobodyさん [sage] 02/11/02 00:10ID:???
print <<7LINE;
*******************************************************************************
*******************************************************************************
*******************************************************************************
*******************************************************************************
*******************************************************************************
*******************************************************************************
*******************************************************************************
7LINE
nobodyさん [sage] 02/11/02 00:11ID:???

( ´,_ゝ`) プッ
nobodyさん [sage] 02/11/02 00:19ID:???
(; °▽°)FILEなくもいけた〜〜
nobodyさん [] 02/11/02 00:51:TEd9xaNd
echo "aho1"
echo "aho2"
echo "aho3"
echo "aho4"
echo "aho5"
echo "aho6"
echo "aho7"
( ´∀`)ヮ-ィ [sage] 02/11/02 01:25ID:???
掲示板でけた〜〜
#!/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>';
nobodyさん [ ] 02/11/02 01:46ID:???
動きませぬ
25 [ ] 02/11/02 01:49ID:???
あ、動きましたw
nobodyさん [sage] 02/11/02 02:08ID:???
Perl限定かよ。
nobodyさん [sage] 02/11/02 06:30ID:???
昔のBASICの1画面プログラムを思い出したよ
nobodyさん [] 02/11/02 14:13:1/HvBlpx
Dukeまだ〜? チンチン
nobodyさん [] 02/11/02 17:48:Sny9GkFS
てめーら七行もあるのにその程度のモンしか作れねーのかよ(プ
nobodyさん [sage] 02/11/02 17:53ID:???

だからきみのすごい作品を待っています。ハイレベル期待しています。
もうできてる? 今からつくる? 今日中には書き込んでくれ。
nobodyさん [] 02/11/02 20:55:RJf4RKlR
すごい作品まだ〜? チンチン
nobodyさん [] 02/11/02 21:13:aPBbHnBW
何本気になってんの?
末吉亮介 [] 02/11/02 21:15:MUhjalxS





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







nobodyさん [sage] 02/11/02 22:13ID:???

作れないヤツはすっこんでてね(はぁと
nobodyさん [sage] 02/11/03 00:25ID:???
は、口だけ大将だったということか・・・
nobodyさん [sage] 02/11/03 10:09ID:???
実際、Perlだったらかなりのものが出来てもおかしくはないかと。
ム板の7行スレは凄かった。
nobodyさん [age] 02/11/03 14:13ID:???
ム板マ板で相手にされない厨が集まる板はここですか?
ユカリ [] 02/11/03 14:35:8kfSttUc

プランテック製の「 RX-2000V 」を改造済み
にした、アイティーエス製の「 RX-2000V 」↓
ttp://user.auctions.yahoo.co.jp/jp/user/neo_uuronntya#.2ch.net/

現在、本当に人気がある様です。
私も、この前、買いました。

関連ホームページ↓
ttp://www.h5.dion.ne.jp/~gekitoku/
ttp://www.h4.dion.ne.jp/~gekiyasu/
ttp://www.h5.dion.ne.jp/~gekirea/
ttp://www.h4.dion.ne.jp/~shinsetu/
nobodyさん [sage] 02/11/03 14:48ID:???
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);
◆FruitsMIpE [sage] 02/11/03 18:15ID:???
名前入力欄つき掲示板

$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;
◆FruitsMIpE [sage] 02/11/03 18:27ID:???
改良

$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};
nobodyさん [sage] 02/11/03 18:38ID:???
を発展させてみた。一行掲示板。

--- 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件まで保存。


ネタが被るねぇ。ゴメンね。(´・ω・`)
nobodyさん [sage] 02/11/03 19:17ID:???
動かねぇです大将!
のは半角でも全角でも変な文字が保存されるです!モジコード変えてもダメだったです!
のはファイルが作成されませぬ!
私のミステイクでしょうか!ハラキリ!
nobodyさん [sage] 02/11/03 19:22ID:???

open F,"+<$l"; ←注目
つー事で、ログファイルは先に作っといて。
$l='7bbs.log';
のトコがログファイルのパスだから、よろ。
nobodyさん [require使えば] 02/11/03 19:44ID:???
1行でも書けるな。
nobodyさん [sage] 02/11/03 20:07ID:???
   (  そんな事より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. トヾ、.゙`ィ'' ´ヽ、/// \二|`\ー‐‐'´
   ,、- '´ ヽ、゙、   { `>"、  !  ! !   | `>-、 | |、  ________∧_____
  /\\    ',   }   //`ヽ|  ',.!゙、 !// ゙!/  !  (  もうね、アホかと。馬鹿かと‥
nobodyさん [] 02/11/03 21:17:QK0oCR94
明文化

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

でいいでしょうか?
rubyist@カラアゲうまうま [sage] 02/11/03 21:21ID:???
perl版cc1だれか作れ
nobodyさん [sage] 02/11/03 22:32ID:???
このスレを見たとき、
ム板かと思いますた。
nobodyさん [sage] 02/11/03 22:34ID:???
掲示板は本家でもうかなり短くなってないか?

別に委員だけど、もっと面白いネタがないかなと。
43 [sage] 02/11/03 23:08ID:???

プログラムが Web 関連物なら言語は何でもいいんじゃ?
シェバング行は C の #include みたいなモンだから…。


単に縮めるだけじゃなく、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>
----------------

["&<>] を数値文字参照に変換。
nobodyさん [sage] 02/11/03 23:18ID:???
7行のスレッドフロート型掲示板とかは無理?
◆FruitsMIpE [sage] 02/11/03 23:44ID:???

Winではflock 使えなくてエラーに ヽ(*`Д´)ノ ワァァン


ガ━━━━(;゚Д゚)━━━━ン !!
すいませn原因わかりませn
Windows環境でSJISならうまくいくんだけど・・


前に2ch型掲示板作ってみたけど、無理確定のような気がする。
誰か作れる人、いるかな
nobodyさん [] 02/11/04 06:56:5+umhhBG
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型から離れているが。
nobodyさん [sage] 02/11/04 09:38ID:???

それは普通掲示板といいません(w
win鯖では動いたけどな。
nobodyさん [sage] 02/11/04 12:16ID:???
やはりCGIだと、定型的な部分で多く取られてしまいますな。
( ´∀`)でけた〜 [sage] 02/11/04 12:59ID:???
[アクセス解析]
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}
nobodyさん [sage] 02/11/04 14:26ID:???
で、実用性ある奴はあるのか?
nobodyさん [] 02/11/04 15:47:CMvXGJGy
(・ε・)v キニシナイ!
nobodyさん [sage] 02/11/04 20:59ID:???
HTML4.01strictとかどうよw
nobodyさん [sage] 02/11/04 23:14ID:???

試しにHTMLを分離して作ってみたら大分縮んだ。
ttp://boobar.hp.infoseek.co.jp/7bbs2/7bbs2_0.0.1.tar.gz


縮めてみた。

#!/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
age [age] 02/11/05 18:48ID:???
age
nobodyさん [] 02/11/14 07:16:M/ZRCXHw
あげ
nobodyさん [] 02/11/20 18:28:707UhyRv
7行Wikiくれ。
nobodyさん [sage] 02/11/21 07:14ID:???
---- 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;

nobodyさん [sage] 02/11/21 19:40ID:???


#!/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 要る?
nobodyさん [] 02/11/21 22:28:mGPCTII6

thx ...

WikiName の正規表現は \b([A-Z][a-z]+){2,}\b って書けるみたいだね。
\b 要るかどうかしらないけど、個人的には欲しい。
# ttp://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・・・他に、こんなのもあるよ。
ttp://c2.com/cgi/wiki?ShortestWikiContest
nobodyさん [sage] 02/11/21 22:40ID:???
間違えた・・
s|\b([A-Z][a-z]+){2,}\b|a{href=>"7wiki.cgi?$1"},$1|ge;
nobodyさん [sage] 02/11/21 22:52ID:???
括弧わすれてた・・・ゴメン(再び修正
\b(([A-Z][a-z]+){2,})\b
nobodyさん [sage] 02/11/22 07:28ID:???
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$_
nobodyさん [sage] 02/11/22 14:36ID:???
Good job.
nobodyさん [sage] 02/11/22 18:30ID:???
折角なので副産物も(ワンライナーだけど
れぎゅれーしょん ちぇっか usage: ./7rc.pl < target_script.pl

#! perl -nw
chomp;length>79||$.>7?die:print"line $. OK\n"

nobodyさん [sage] 02/11/24 15:39ID:???

use Fcntl;
はいらないのか?
nobodyさん [sage] 02/11/24 17:47ID:???
use Fcntl; O_CREAT|O_RDWR を纏めて 286(tie の引数

定数部分は環境依存するかも知れないので
/usr/include/sys/fcntl.h を参照
nobodyさん [sage] 02/11/25 00:58ID:???
DB_File なら use した時点で O_CREAT も O_RDWR も使えるようになる罠。

use DB_File;
print join '/', O_CREAT => O_CREAT, O_RDWR => O_RDWR;

そして O_CREAT は実際 512 だったり 256 だったりする罠。
nobodyさん [sage] 02/11/25 06:28ID:???
余った行で僅かばかり実用的にしてみる。

#!/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)
nobodyさん [sage] 02/11/25 23:38ID:???
#! 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 とかでも無理かな?
nobodyさん [sage] 02/11/26 00:26ID:???
< $_=escapeHTML($m=param('m')||$m);seek F,0,0;print F $m;
> $_=escapeHTML $m=param('m')||$m;seek F,0,0;print F$m;
nobodyさん [sage] 02/11/26 00:30ID:???
< .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"*"
74 [sage] 02/11/26 00:51ID:???

勉強になりました。
nobodyさん [sage] 02/11/26 01:21ID:???
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
nobodyさん [sage] 02/11/26 04:49ID:???

ごめん、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 長くなった。むぅ。
nobodyさん [sage] 02/11/26 06:11ID:???
書き忘れたけど、78-82 はWin/ActivePerlで作ってました。
他の環境に移したら CGI.pm 2.56 で同様のエラーが出たので
パッケージ名をつけてCGI::escapeHTMLで対応。
もしくは、モジュールを新しくする。でいいかな>対策

NOTE
QUERY_STRING を PATH_INFO に変更して
url の区切りを ? -> / に。
# 勿論、 s/// のスラッシュも他の記号に変更する。

(stat)[9]


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

nobodyさん [sage] 02/11/26 22:06ID:???

パッケージ名付けた方が優しいかな。> 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
で引っかかるやも。
nobodyさん [sage] 02/11/27 00:19ID:???
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

nobodyさん [sage] 02/11/27 01:56ID:???
#! 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
nobodyさん [sage] 02/11/27 06:40ID:???
#! 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;
nobodyさん [sage] 02/11/27 08:37ID:???
検索エンジン

<? fopen("ttp://www.yahoo.co.jp");?>
nobodyさん [sage] 02/11/27 09:55ID:???

Warning: fopen() expects at least 2 parameters, 1 given in ...
nobodyさん [sage] 02/11/27 20:42ID:???
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 を輸出しないので括弧が必要。
nobodyさん [sage] 02/11/28 03:13ID:???
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 は の環境では付けないとCGIとして動かなかったんだけど・・
どうしてだろう?z maybe crash って warning 出すのはわかっていたけど
ちゃんと動いていたような気がする。(エラーログ今度ちゃんと見て来よう。


TextRule に Pod::Htmlを使おうとしたが、
pod2html はファイルを対象としているため実装を断念。
残り一行じゃ TextRuleは辛いかな・・URLのリンクくらいなら追加出来そう・・?
nobodyさん [sage] 02/11/28 03:23ID:???
あっ バグ・・・今気付いた。
open が失敗した時困るかな
nobodyさん [sage] 02/11/28 05:30ID:???

アイコンと 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
nobodyさん [sage] 02/11/28 05:55ID:???
修正…。

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
nobodyさん [sage] 02/11/28 06:10ID:???

成る程、そういう環境もありますか。
warning 吐きまくるのはヤだなぁと思っただけなんで、
shebang line は適宜変更でいいですかのぅ。

つか valid な HTML にはあまりこだわってませんか。

URL リンクはこうかな…。
s|(ttp://http://">http://[\w!#-;=?-@~]+)|a{href,$1},$1|eg;

nobodyさん [sage] 02/11/28 11:46ID:???
>困りました。:)
ごめん。パズルに夢中で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
nobodyさん [sage] 02/11/29 06:36ID:???

うん、well-formed ではあるけど、pre に hr や ul が入ってるから
valid じゃないよね。

別にいちゃもん付けてるんじゃ無くて、七行に収まってる状態で更に
数 byte の為に valid な出力を諦めるか否かは好みの問題だから、
何としても縮める方針でやってるのかな、と。挙動が変更されたコード
見たら、何を意図してるか大体分かるでしょ。

で、俺は shebang 込みで七行派だから、7wiki.cgi に関しては
下ので完成気分。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
nobodyさん [sage] 02/11/29 08:01ID:???
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 が悩み処ですな。
nobodyさん [sage] 02/11/29 08:04ID:???
rename の仕方:
変更したいファイルにチェック、textfield に変更後の名前を入れて MV

勢い5万以上のスレをメールでお知らせするサービス、実施中!!
憧れボディをGETしたい!その夢、ボニックで!

2ch勢いランキング 全部 1- 最新50 WebProg板ランキング

凡例:

レス番

100 (赤) → 2つ以上レスが付いている
100 (紫) → 1つ以上レスが付いている

名前

名無しさん (青) → sage のレス
名無しさん (緑) → age のレス

ID

ID:xxxxxxx (赤) → 発言が3つ以上のID
ID:xxxxxxx (青) → 発言が2つ以上のID

このページは2ch勢いランキングが作成したキャッシュです。元のページはこちら。削除についてはこちら