自作CGIを評価するスレ
■ このスレッドは過去ログ倉庫に格納されています
0001Premature end of script headers : /this/thread
03/04/05 12:47ID:tIET0nhfよほどプログラムが短くないかぎりはアプロダにでもアップしてね。
010271
03/04/06 05:48ID:???規定外の値だとデフォルト値になるようにしてるなぁ
010379
03/04/06 05:49ID:???かなり違うことがわかったんで 今日は寝るサラバ
起きたら局所変数を意識したプログラムを書いてみよう。
010437 ◆0wPZQfeVoI
03/04/06 06:08ID:t3fZoblFまだすべて修正できていませんが、一応アド載せときます。
BBS: http://hex51.darktech.org/cgi-bin/the/bbs.pl
SRC: http://hex51.darktech.org/the.txt
余談ですが、部屋がめちゃめちゃ寒いです..
010571
03/04/06 06:17ID:???my $cntfile = './count.dat';
my $log_dir = './logs';
our $lock_name = 'lock';
<中略>
my $t_h_width = 0;
my $t_f_width = 70;
my $name_size = $name_max - 4;
my $title_size = $text_cols;
この部分って全部グローバルだからourになっちゃうよん
my $hoge #グローバルと同意で無意味
{
my $hoge; #○
{
my $hoge; #○
}
}
みたいにブラケットで括られた中(サブルーチンでもなんでもいいけど・・・)で宣言した部分じゃないと無意味
010637 ◆0wPZQfeVoI
03/04/06 06:29ID:t3fZoblFさっさとourにしておきます。
010737 ◆0wPZQfeVoI
03/04/06 06:33ID:t3fZoblF0108nobodyさん
03/04/06 06:34ID:???010937 ◆0wPZQfeVoI
03/04/06 06:52ID:???取り合えず今日は寝てません。
0110nobodyさん
03/04/06 08:06ID:???our にはならない。
別のパッケージから読みこんだりしてるのでなければ、
わざわざ our にする方が意味ないと思うけど?
0111これ自信作だぜ
03/04/06 08:51ID:dTzeXpbT0112あぼーん
03/04/06 08:52ID:???―――┴┴┴┴┴―――――、
. . /  ̄ ̄ ̄//. ̄ ̄| || ̄ ̄ ̄||| ̄ || __________
./ ∧// ∧ ∧| || ||| || /
[/____(゚_//[ ].゚Д゚,,) ||___||| || < こんなのが有りますた
. ||_. * _|_| ̄ ̄ ∪|.|. |ヽ.__|| \__________
. lO|o―o|O゜.|二二 |.| 救済病院 ||
.| ∈口∋ ̄_l__l⌒l_|___|_l⌒l._||
 ̄ ̄`ー' ̄ `ー' `ー' `ー'
http://saitama.gasuki.com/koumuin/
0113これ自信作だぜ
03/04/06 08:52ID:dTzeXpbThttp://oasis.mininddns.net/
0114これ自信作だぜ
03/04/06 08:53ID:dTzeXpbThttp://oasis.minidns.net/
0115あぼーん
03/04/06 09:17ID:???川o・-・)ノ <先生!こんなのがありました!
__/ / /
\(_ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄||
...|| ̄ ̄ ̄ ̄||
http://saitama.gasuki.com/shinagawa/
0116これ自信作だぜ
03/04/06 10:29ID:dTzeXpbT蜜柑性だけどな
0117nobodyさん
03/04/06 10:35ID:???ってでてるよ>116
0118nobodyさん
03/04/06 10:45ID:???>>71はブロックの外で宣言すると、例えばサブルーチンの中からでも参照できてしまうので
変数宣言する時は、スコープを絞って適切なブロック内で宣言しよう…と言っているのだと思う。
修正というか、むしろ改悪されえてるような・・・。
our にしてしまうと、他のファイルからも値を参照出来る様になってしまうので、
# つっこみたかったのは、
# > この部分って全部グローバルだからourになっちゃうよん
# my で宣言してるのに勝手に our にはならないよー。ってこと。
よくある方法だと、main関数(サブルーチン)を作るか、
単にブロックで囲む。(ラベルは別にいらないけど便宜上)
MAIN:{
my $foo = 'bar';
;
}
ちなみに、定数宣言なら変数にはせずに、
use constant LOG_DIR => './logs';
という風にしておくと、代入できないから
グローバルとか関係なく中の値は保証されるよ。
011937 ◆0wPZQfeVoI
03/04/06 14:26ID:???囲ってみます。
012071
03/04/06 15:01ID:???>変数宣言する時は、スコープを絞って適切なブロック内で宣言しよう…と言っているのだと思う。
そいう意味.、言い方まずかったですな・・・
0121nobodyさん
03/04/06 15:42ID:???while{} foreach{} for{} sub{} {}
が?有効なの
if{}はどうなるの?
0122nobodyさん
03/04/06 15:46ID:???012371
03/04/06 15:49ID:???基本的に {}で囲ってる部分は全部スコープになりますよん
if{}でも eval{}でも 一緒
ファイルの重複を避ける処理
{
my %count;
@array = grep(!$count{$_}++, @array);
}
これみたいに、スコープを作るために括る事もありますし
0124nobodyさん
03/04/06 15:57ID:???なんで局所変数とかみんなつかうの????
012771
03/04/06 16:12ID:???グローバルがいいっていうなら、そうすればいいのじゃない?
自分だけでやっとればいいってのなら一向にかまわないけど、
複数の人がからんでくるとなるとそうもいかない
012837 ◆0wPZQfeVoI
03/04/06 16:44ID:???今日はPHPで学校の掲示板を作るので
あまり変更はないかもしれません。
>>71さん
気をつけないと
if ($hoge eq 'hoge') {
my $foo = 'hoge!';
}
print $foo;
この場合マズイですよね?
チョットmyについていろいろと試してみます。
012971
03/04/06 16:49ID:???それはスコープの外に print $fooがあるので動作しない
if ($hoge eq 'hoge') {
my $foo = 'hoge!';
print $foo;
}
コレが正解
0131nobodyさん
03/04/06 20:10ID:???使った方が良いってだけで。
0132nobodyさん
03/04/07 00:03ID:???安全だし速度的にも有利だからね。
0133nobodyさん
03/04/07 15:58ID:???0134nobodyさん
03/04/07 16:14ID:???じゃなきゃそんなモジュール作らんよ。
0136nobodyさん
03/04/07 22:42ID:???ソートの練習なんです。
いちおう漏れの思っている動作しているのですが,突っ込むところがあれば,後学のために色々教えてください。
ソースはこちら,
ttp://members.tripod.co.jp/angeldayan/
使ったデータはこちら
ttp://members.tripod.co.jp/angeldayan/data.txt
要 cgi-lib.pl です。
たいしたものじゃなくてごめんなさい。
初心者なんで,これでも1週間かかっちゃったんです。
よろしくお願いします。
0138nobodyさん
03/04/08 18:57ID:???myとかの使い方覚えたほうがいいかも
まだはじめたばかりなのならPHPもいいかもよ
でスクリプトに関しては
ファイルをアップロードするわけでもないんだし
自前でデコードしよう。
漏れも挑戦してみていいかい?
http://iwh11.hp.infoseek.co.jp/p/e/r/perldev/cgi-bin/upload/source/039.txt
PerlスクリプトなんでDOSから動かしてね
0141nobodyさん
03/04/08 20:25ID:???varsプラグマ(v5.6以降だと our)を使うのは、
use strict 'vars'プラグマを有効にした時に、
複数のパッケージである変数を別のパッケージから使いたい場合、等。
no strict は、場合によっては反則 ...
0142nobodyさん
03/04/08 23:45ID:???myの方が3,4倍遅かったのだけど…。メモリ消費は解らない。
014371
03/04/09 03:32ID:???cgi-lib使ったことないからあてずっぽうだけど、かなりソース書きなおす事になったねぇ
ttp://iwh15.hp.infoseek.co.jp/p/e/r/perldev/cgi-bin/upload/source/041.txt
014471
03/04/09 03:33ID:???if ($in{'rev'}){
my $script = 'http://' . $ENV{'SERVER_NAME'} . $ENV{'SCRIPT_NAME'};
ココ逆だな・・・
my $script = 'http://' . $ENV{'SERVER_NAME'} . $ENV{'SCRIPT_NAME'};
if ($in{'rev'}){
> myとかの使い方覚えたほうがいいかも
わかりました。勉強します。
> PHPもいいかもよ
perlと心中しまつ。
> ファイルをアップロードするわけでもないんだし
いやいや、今後画像をあぷすて貼り付けるつもりなので。。。
いつになるかわかりませんが。。。。。
>>144
うわぁ、ソースが綺麗でつ。
でも、動きません。。。。。
ローカルでは「ページを表示できません」で動きませんし、
サーバにあげてみた所、最初の画面は表示するものの、
情報のリンクのところが
http://サーバー名/$script?action=1&rev=1&n=0
って、$script そのままでつ。
結果は404でつ。
自分でも調べてみまつ。
0147nobodyさん
03/04/09 09:53ID:???> myの方が3,4倍遅かったのだけど…。メモリ消費は解らない。
根拠を示さずに結果だけ取り出して言われても…。誤解されないかな?
my の何のベンチマークを行なったの?
ループ・ブロック内で変数を宣言して、そのオーバーヘッドを測っていた
なんて事はないよね?それとも、ホントに変数の参照・代入が3〜4倍もかかったりした?
0148nobodyさん
03/04/09 10:12ID:???myのほうが遅いというのはちょっと信じがたいな。
ブロック外から参照される必要がないからシンボルテーブルにも
登録されないし、むしろ速くなるはずだが・・・
$html =<<'EOT'; を $html =<<"EOT"; でOKでした。
なお、ローカルで動かない件は、cgi-lib.pl へのパスが違っていたというアフォが原因。
0151nobodyさん
03/04/10 06:38ID:???確か、CGI.pmがサポートしてたはず・・・
標準モジュールだよ。
use CGI qw(:cgi-bin);
0153nobodyさん
03/04/10 10:43ID:ljl/7aqx-w と use strict 外して my も何も付けない場合とか、
our も試して見たけど。速度的には my < our < local って順番だったよ。
#! perl -w
use strict;
use Benchmark qw(:all);
my $count = 100;
my $code1="my \$code=1;"; map{$code1 .= "\$code++;\n"}(1..$count);
my $code2="local \$code=1;"; map {$code2 .= "\$code++;\n"}(1..$count);
timethese(1000,{
'Lexical' => sub {eval $code1},
'Dinamic' => sub {eval $code2}
});
----
Benchmark: timing 1000 iterations of Dinamic, Lexical...
Dinamic: 11 wallclock secs (10.60 usr + 0.00 sys = 10.60 CPU) @ 94.34/s (n=1000)
Lexical: 2 wallclock secs ( 2.14 usr + 0.00 sys = 2.14 CPU) @ 467.29/s (n=1000)
0154nobodyさん
03/04/10 13:31ID:???追試。
--- bench ---
use strict; use Benchmark;
my $loop = 5000;
my $code1 = 'my $code = 1;' . '$code++;' x 100;
my $code2 = 'local $code = 1;' . '$code++;' x 100;
timethese($loop, { '1_my' => sub { eval $code1 }, '2_local' => sub { eval $code2 } });
---
● ActivePerl Build 522 on Win98SE
Benchmark: timing 5000 iterations of 1_my, 2_local...
1_my: 4 wallclock secs ( 4.45 usr + 0.00 sys = 4.45 CPU)
Global symbol "$code" requires explicit package name at (eval 5005) line 1.
2_local: 8 wallclock secs ( 7.75 usr + 0.00 sys = 7.75 CPU)
● Perl 5.005_03 on FreeBSD 4.8R
Benchmark: timing 10000 iterations of 1_my, 2_local...
1_my: 6 wallclock secs ( 5.62 usr + 0.01 sys = 5.62 CPU)
Global symbol "$code" requires explicit package name at (eval 10005) line 1.
2_local: 11 wallclock secs (10.92 usr + 0.02 sys = 10.94 CPU)
● Perl 5.8.0 on FreeBSD 4.8R
Benchmark: timing 10000 iterations of 1_my, 2_local...
1_my: 4 wallclock secs ( 4.74 usr + 0.00 sys = 4.74 CPU) @ 2108.73/s (n=10000)
2_local: 18 wallclock secs (17.20 usr + 0.00 sys = 17.20 CPU) @ 581.55/s (n=10000)
0155nobodyさん
03/04/10 18:05ID:???if ( ( my $aho = $query->param('hogehoge') ) eq 'hoge') {
$a =~ s/a/b/;
$nazoflag .= $a;
} else {
# $ahoは見える。
}
# $ahoは見えない。
while ( defined ( my $line = <IN> ) ) {
# $lineは見える
} continue {
# 見える
}
# 見えない
こういう場合のスコープについては、その制御構文の最後までに限定される。←あいまいだな…
0156nobodyさん
03/04/10 18:08ID:???これは、、sort用にこっそり、エラーにしないようになってるのかな。
追加、これはなかなか使える
foreach my $hoge (@list) {
}
0157nobodyさん
03/04/10 18:36ID:ljl/7aqx質問。continue って何?
0158nobodyさん
03/04/10 18:58ID:???0159nobodyさん
03/04/10 20:47ID:???こんな制御構文あったんだ。知らなかった。Thx >> 158
0160nobodyさん
03/04/10 20:58ID:???0162nobodyさん
03/04/11 00:36ID:???すみませんがちょっと漏れのスクリプトを見てください。
前回のソートの練習に加え、ページの分割もしてみますた。
いちおう漏れの思っている動作しているのですが,突っ込むところがあれば,後学のために色々教えてください。
なお、前回指摘された “myとかの使い方” は。。。。。(^^A
ソースはこちら,
ttp://members.tripod.co.jp/angeldayan/test.txt
使ったデータはこちら
ttp://members.tripod.co.jp/angeldayan/data.txt
要 cgi-lib.pl です。
たいしたものじゃなくてごめんなさい。
016471
03/04/12 22:26ID:???登録データの件数が増えるのならば
sortの cmp と <=>のルーチンを考えたほうがいいかも
foreach(@keys){
if($_->[$n] !~ /^\d*$/){
$num_flug =1;
last;
}
}
データ量増えていくと、cmpを使う場合処理が遅くなる。
if($n= 4){
if($rev){
@keys = @keys[ sort {$keys[$b]->[$n] <=> $keys[$a]->[$n]} 0 .. $#keys ];
}else{
@keys = @keys[ sort {$keys[$a]->[$n] <=> $keys[$b]->[$n]} 0 .. $#keys ];
}
}else{
if($rev){
@keys = @keys[ sort {$keys[$b]->[$n] cmp $keys[$a]->[$n]} 0 .. $#keys ];
}else{
@keys = @keys[ sort {$keys[$a]->[$n] cmp $keys[$b]->[$n]} 0 .. $#keys ];
}
}
みたいな感じかになろうか・・・
0166nobodyさん
03/04/12 22:53ID:???0168nobodyさん
03/04/12 23:21ID:???途中でダレたからかなり適当ですがいぢってみますた。
http://boobar.hp.infoseek.co.jp/refactoring/test.txt
さんくすでつ!
> データ量増えていくと、cmpを使う場合処理が遅くなる。
初耳でつ メモメモ 〆(・_・。)
>>168
全面的に書き換えてくださり、ありがとうございまつ!
感謝でつ!
乙でつ!
さっそくテストしてみまつた!
おー、動いているー。。 あれ(?_?)
データ件数は88くらいあるはずなのに、80までしか表示されない。。。
でもがんばってスクリプト読み下して自分で修正したいと重い松。
017271
03/04/13 04:57ID:???foreach(@keys){
if($_->[$n] !~ /^\d*$/){
$num_flug =1;
last;
}
}
lココの部分がどういう処理をしてたか説明してみそ
if($_->[$n] !~ /^\d*$/){ # $_の$n番目の値が数字ではなかったら、
$num_flug =1; # $num_flugに1を入れまつ
last; # foreachのループ抜けまつ
} # ifを閉じまつ
} # foreachを閉じまつ
これでいいでつか?
修正できましたぁ〜!
$lastpage++ unless @Record % $Pageview;
を
$lastpage++ if @Record % $Pageview;
0176nobodyさん
03/04/13 05:31ID:???>>169
>> データ量増えていくと、cmpを使う場合処理が遅くなる。
>初耳でつ メモメモ 〆(・_・。)
から、どうして
>>170
>初耳じゃなくて、そういうソースを組んでたから
>指摘したまでなんだけど・・・
のようなレスが付くのか良く分かりません。
cmp使うのが初耳だったんでしょ?なんで「初耳じゃなくて」なんだろう?
0177nobodyさん
03/04/13 05:32ID:???○cmp使うと遅くなるっていうのが初耳だったんでしょ?
017871
03/04/13 05:32ID:???つまり、該当データが文字列ばっかりだとループ終わるまで抜けない。
-> 次の処理にいくまで時間がかかるという事で cmp処理のときに時間がかかるという理屈。
あっ!
そういう意味だったんでつね。。。. (^^ゞ
んじゃ、メモを。。。消し消し. _□(. .。
018171
03/04/13 06:00ID:???ttp://kiteline.net/imgbbs/img/137.txt
この規模だと分ける意味がないとおもうんだけど・・・
改造さんくすでつ!
でも、穴が多いッスね。
次のページを押し続けれないし、
前のページが表示されないし、
順番が0-9の固定だし。。。
勉強のため漏れが修正したいと重い松が。。。
>>181さんの目から見て、>>168さんのソートは処理が重そうでつか?
>>168さんのソースは今まで漏れが出会ったことのない書き方だからちょっと苦戦しておりまつ。
おっと、>>168さんのソース、逆順ソートが出来ない。。。
あう〜
こちらも漏れが修正したいと重い松。
逆順ソートが出来ない件、修正しましたが。。。
$TableHeader .= qq|\t<th><a href="| . make_url(n => $_, action => 1) . qq|">$field{$_}</a></th>\n|
for sort { $a <=> $b } keys %field;
を
if ($Param{'rev'}){
$TableHeader .= qq|\t<th><a href="| . make_url(n => $_, action => 1,rev => 0) . qq|">$field{$_}</a></th>\n|
for sort { $a <=> $b } keys %field;
}else{
$TableHeader .= qq|\t<th><a href="| . make_url(n => $_, action => 1,rev => 1) . qq|">$field{$_}</a></th>\n|
for sort { $a <=> $b } keys %field;
}
っていうのにしましたが、もっと簡単になりまつか?
018571
03/04/13 06:58ID:???別にいい悪いはないと思いますけどね。
どんな記述も出来るのがperlですし・・・
自分が見やすければいいんじゃないでしょうか?
あと、自分的には不要な変数を極力使わないぐらいですか・・・
0186nobodyさん
03/04/13 07:34ID:???なんだこりゃ?
$TableHeader .= qq|\t<th><a href="| . make_url(n => $_, action => 1,rev => ($Param{'rev'} ? 0 : 1)) . qq|">$field{$_}</a></th>\n|
for sort { $a <=> $b } keys %field;
だろ?
サンクス!
こういう書き方は初めてなんで、かなり苦戦しておりまつ。
0188nobodyさん
03/04/13 16:20ID:???聞いてて疲れる
0189nobodyさん
03/04/13 17:03ID:???0190168
03/04/13 20:14ID:???直した。
http://boobar.hp.infoseek.co.jp/refactoring/test.0.0.2.txt
文法的に分からんトコは、駱駝本なり perldoc なり見てね。
「何でこういう処理が必要なのか分からない」ってトコは聞いて。
う〜、感涙!
実際、かなり省略した書き方なので、文法的にわかんないところばっかりでつ。
だからどんな処理をしているのかわかんなかったりして…(^^;
でも、がんばって自分で読み下して理解しまつ。
コメント文の多さに助かってまつ。
これからもご指導ご鞭撻のほどよろしくおながいしまつ。
>>188
あいた〜
苦情でつ!
このスレででつまつ使ってるのって漏れだけでつ〜
こういうの使ってみたい年頃なんでつ〜
(゙ `-´)/ ヤメレ! って言う声が多ければ考えまつ。
0192nobodyさん
03/04/14 05:17ID:???漏れの思っている動作は、
各Info ボタンを押すと昇順にも降順にもなる。
この際順番(ここではOrder)昇順なら小さい方から1、降順なら大きい方から1がいいんでつ。
でも>>190様、直さないでくださいね。
漏れがやるんでつ。
あと。。。
my @Field = qw(Info1 Info2 Info3 Info4);
っていう所。
my @Field = qw{Info1 Info2 Info3 Info4};
my @Field = qw|Info1 Info2 Info3 Info4|;
my @Field = qw(Info1 Info2 Info3 Info4(;
my @Field = qw)Info1 Info2 Info3 Info4);
my @Field = qw(Info1 Info2 Info3 Info4);
my @Field = qw\Info1 Info2 Info3 Info4\;
なんでもいいんでつね。
勉強になりまつた。
でも、
my @Field = qw(Info1 Info2 Info3 Info4);
で良くて、
my @Field = qw)Info1 Info2 Info3 Info4(;
でダメなのは納得いかなかったりして。。。(汗)
0194山崎渉
03/04/17 12:07ID:???0195マリモーマ ◆r6PDGT6Xd2
03/04/18 17:28ID:fPIUuruFhttp://ebrain21.com/~game/me/mai.cgi
0197nobodyさん
03/04/18 17:35ID:BrkP32Ds0198マリモーマ ◆r6PDGT6Xd2
03/04/18 19:34ID:fPIUuruF0199nobodyさん
03/04/18 21:18ID:???0200マリモーマ ◆r6PDGT6Xd2
03/04/19 13:29ID:kAGW5QYqできなくなるかも?
0201nobodyさん
03/04/20 00:47ID:???掲示板、見にく(ry
■ このスレッドは過去ログ倉庫に格納されています