自作CGIを評価するスレ (672レス)
上下前次1-新
68(1): 03/04/06 04:23 ID:??? AAS
#○ログファイル
$def_log_file = q[./log.txt];
これは納得できるが
#○一度に表示されるレスの件数。
#[3〜6]推奨。多く設定すると端末側で読み込めない場合があります。
$def_mess_page = qq[5];
こっちをダブルクオートで囲むのはなぜ?
数値をクオートで囲まれると変な気がする…
69(1): 03/04/06 04:25 ID:??? AAS
>>41
>>32
70(1): 03/04/06 04:32 ID:??? AAS
myは本当は局所的に使うためなのはしってるんだけど
どうしてもその前後で値が必要になったりすることが多いので
サブルーチンなら先頭に全部まとめて書いてる・・・
71(31): 03/04/06 04:34 ID:??? AAS
>>70
余りいい設計じゃないなぁ・・・
subは位置に依存しないものであるべき
72: 41 03/04/06 04:37 ID:??? AAS
>>61
>・最初(〜300行目)のqqはなんだ?
qq自体の意味でしょうか…?qならシングルクウォートでqqならダブルです。
入力は、ご使用していただく方に任意で入力してもらいます。量が多くてめんどうな気がしますけど…。
>インデントがおかしいのと
>記述に一貫性がないのが気になるね。
つまり見にくいと…。私の中では今までで1番気をつけた記述だったりしますが…
頑張ります。
サブルーチンがそこそこ見られるのは良いと思う(ただ、もう少しstrictに書こう)
strictってなんだろう、汗。調べてみます。
省12
73(2): 41 ◆hht1jkpw9E 03/04/06 04:43 ID:??? AAS
>>69
はい、これで行きます、トリップ。
>>68
もし、
#○一度に表示されるレスの件数。
#[3〜6]推奨。多く設定すると端末側で読み込めない場合があります。
$def_mess_page = 5;
とした場合、どこに入力したら良いか目で確認しにくいかと思いまして…。
数字なのでシングルではなく、ダブルで囲んでます。
なんて言うのか、入力する場所を
省2
74: 03/04/06 04:47 ID:??? AAS
>>73
んー基本的なことを言わせてもらうと・・・
コメントでちゃんと書いとけば理解してもらえる範囲じゃないかと思うけどね・・・
それでわからないっていうのは相手する必要が無いような・・・(ぉ
75(2): 03/04/06 04:48 ID:??? AAS
>>71
激しく意味不明なやつになっちまったけど
sub saitama{
my ($value,$saitama,$hoge);
foreach $value (@_){
($saitama,$hoge) = split(/,/,$value);
if($saitama == $hoge){ return 1; }
}
return 0;
}
省1
76(1): 03/04/06 04:53 ID:??? AAS
って言うか最近多い「4」って香具師は「4番」ではなく、コテハン?
普通に紛らわしい。なんとかしてほしい。
77: 03/04/06 04:55 ID:??? AAS
このスレタイっておかしくない?
× 自作CGIを評価するスレ
○ 自作CGIを評価してもらえるスレ
○ 自作CGIを評価していただくスレ
じゃない?
78: 71 03/04/06 04:55 ID:??? AAS
AA省
79(7): 75 03/04/06 05:00 ID:??? AAS
まぁ意識しろって言われたら
漏れならこう書くんだけど
sub saitama{
foreach my $value (@_){
my ($saitama,$hoge) = split(/,/,$value);
if($saitama == $hoge){ return 1; }
}
return 0;
}
78のコードと比べるとどっちのほうが
省3
80: 71 03/04/06 05:03 ID:??? AAS
まぁ、書き捨てにするか後から見やすく書くかのレベルになる罠(w
81: 03/04/06 05:05 ID:??? AAS
>>66
普通の変数も無名ハッシュっていう位置づけじゃなかったっけ?
82: 37 ◆0wPZQfeVoI 03/04/06 05:07 ID:t3fZoblF(17/25) AAS
>>76
非常にすみません。
Perlの極意スレの4番です。
もう沈んでどこかに行ったスレです。
なんとなくそのまま4でした、改名します、37です。
83(1): 03/04/06 05:09 ID:??? AAS
>>79
漏れは 何回も使う関数的なやつは結構まともに書いてるけど
本体が長くなるからただ分けただけのサブルーチン的なものだと
かなりだらしないわ。
一応strictなコードでmod_perlで動いてる
84(4): 03/04/06 05:10 ID:??? AAS
AA省
85: 03/04/06 05:12 ID:??? AAS
「エラー処理を先にやれ」っていう格言をどっかで見た。
それ以上続けるのが無意味と分かっている場合に
だらだらと引きずるのは良くない。すぱっとreturnすべき。
86: 71 03/04/06 05:13 ID:??? AAS
>>84
まぁ、別に好きなように書けばいいんだけど、
グローバル変数の値をサブルーチンから出力することもあるし・・・
それ以前に、どのレベルで言ってるかつーのが気になる所かもなぁ
ちなみにgotoは使わないよ。必要ないから(w
87(1): 37 ◆0wPZQfeVoI 03/04/06 05:15 ID:t3fZoblF(18/25) AAS
>>84
なるほど、私は上のほうの書き方しますね..
やはり、コードが見やすいというのもプログラムの重要な要素に
はいるのでしょうか?
88(1): 79 03/04/06 05:16 ID:??? AAS
>>84
それ書くなら
if(真 && 真 && 真){何か}else{return 0;}
だろうなぁ…
まぁ趣味でやってるプログラミングなんで
動いたら嬉しいって程度なんだが(w
>>83
関数だと割ときれいに書くな 漏れも
89(1): 71 03/04/06 05:21 ID:??? AAS
>>87習慣づけしとけばスパゲッティなソースにはなりにくいのが作れると思うけどねん
returnは複数付けるのが一般的らしいな、覚えとこう
90(1): 79 03/04/06 05:22 ID:??? AAS
>>37
貴殿のソースをみたんですが
653-669行・・・ これなんすか?(w
91(1): 37 ◆0wPZQfeVoI 03/04/06 05:26 ID:t3fZoblF(19/25) AAS
>>89さん
そのためには1度しか使わない処理でも無駄にサブルーチン作って、
見やすくすることも必要でしょうか?
趣味で作るので、自分以外がソース読むことが無かったため
とりあえず、自分が読めれば気にしなかったのですが。
92(2): 37 ◆0wPZQfeVoI 03/04/06 05:29 ID:t3fZoblF(20/25) AAS
>>90
エラー処理ですが、
if () { えらー1}
if () { えらー2}
if () { error }
としたほうがいいですかね?
93(1): 71 [sage あっちでは251(w] 03/04/06 05:31 ID:??? AAS
>>91
慣れてない時は単純な処理にでもサブルーチンは作ってたけど、
今は、機能ごとにサブルーチンを作ってるって感じですね
同じ処理でも規模がおっきくないとそのまま書きなぐりすることがおおいです
94(1): 79 03/04/06 05:32 ID:??? AAS
>>92
エラーで止める優先度あるの?
unless ($a < 100){&error("$aが100以下じゃありません");}
unless ($b eq 'GET'){&error("$bがgetじゃありません");}
〜〜
でいいと思うが・・・
95: 71 [sage あっちでは251(w] 03/04/06 05:35 ID:??? AAS
>>92
@error =(
err1,
err2,
);
$error[$code];
みたいなことを最近よくするな(w
96: 03/04/06 05:38 ID:??? AAS
>>88
あっと、>>84の例ではエラー処理が同一に書いてしまったのでおっしゃるとおりなんですが、
エラー処理が失敗した段階によって異なると考えてくださいませ
97: 03/04/06 05:40 ID:??? AAS
×エラー処理が同一に
○エラー処理の部分に同一の処理を
プログラム言語の前に日本語勉強してきます。。。
98: 37 ◆0wPZQfeVoI 03/04/06 05:40 ID:t3fZoblF(21/25) AAS
>>93
なるほどー。
私は2度以上行う処理で引数と返り値が必要なものをサブルーチンに
するようにしていますが、今回少し考え直そうかと。
99: 03/04/06 05:43 ID:??? AAS
つーか>>41の掲示板でかッ!
携帯用だと処理が細かくなって増えるのか?
100: 79 03/04/06 05:43 ID:??? AAS
関係無いが・・・漏れはエラー処理の場合
第一引数は数値だよ第二引数になんかメモ
sub error内でエラーログに記録する内容とかを振り分けることができる
perlだけじゃないが でかいやつになると
エラーメッセージ一覧表だけで数KBになる・・
101: 37 ◆0wPZQfeVoI 03/04/06 05:43 ID:t3fZoblF(22/25) AAS
>>94さん
確かにその通りです。
優先順位などありません..
102: 71 03/04/06 05:48 ID:??? AAS
基本的にエラーメッセージって書かないなぁ(ぉ
規定外の値だとデフォルト値になるようにしてるなぁ
103: 79 03/04/06 05:49 ID:??? AAS
人によってコーディングの仕方が
かなり違うことがわかったんで 今日は寝るサラバ
起きたら局所変数を意識したプログラムを書いてみよう。
104: 37 ◆0wPZQfeVoI 03/04/06 06:08 ID:t3fZoblF(23/25) AAS
ちょっと修正しました。批判していただいた部分は
まだすべて修正できていませんが、一応アド載せときます。
BBS: 外部リンク[pl]:hex51.darktech.org
SRC: 外部リンク[txt]:hex51.darktech.org
余談ですが、部屋がめちゃめちゃ寒いです..
105: 71 03/04/06 06:17 ID:??? AAS
my $mini_cgi = './mini.pl';
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になっちゃうよん
省8
106: 37 ◆0wPZQfeVoI 03/04/06 06:29 ID:t3fZoblF(24/25) AAS
はい、実は上のほうですでに言われました。
さっさとourにしておきます。
107: 37 ◆0wPZQfeVoI 03/04/06 06:33 ID:t3fZoblF(25/25) AAS
修正しますた。
108: 03/04/06 06:34 ID:??? AAS
ま、あせらずゆっくりいけやー。
109: 37 ◆0wPZQfeVoI 03/04/06 06:52 ID:??? AAS
どうもー。
取り合えず今日は寝てません。
110: 03/04/06 08:06 ID:??? AAS
my でスコープはファイル・パッケージ内に限定されるんだから意味はあると思うよ。
our にはならない。
別のパッケージから読みこんだりしてるのでなければ、
わざわざ our にする方が意味ないと思うけど?
111: これ自信作だぜ 03/04/06 08:51 ID:dTzeXpbT(1/4) AAS
修正しましたが何か?
112: あぼーん [あぼーん] 03/04/06 08:52 ID:??? AAS
AA省
113: これ自信作だぜ 03/04/06 08:52 ID:dTzeXpbT(2/4) AAS
↑追加
外部リンク:oasis.mininddns.net
114: これ自信作だぜ 03/04/06 08:53 ID:dTzeXpbT(3/4) AAS
スマソ。スッペルミス
外部リンク:oasis.minidns.net
115: あぼーん [あぼーん] 03/04/06 09:17 ID:??? AAS
AA省
116: これ自信作だぜ 03/04/06 10:29 ID:dTzeXpbT(4/4) AAS
外部リンク:oasis.minidns.net
蜜柑性だけどな
117: 03/04/06 10:35 ID:??? AAS
[index.cgi:26:warn] Use of uninitialized value in concatenation (.) or string at /www/oasis/html/index.cgi line 26. [index.cgi:26:warn] Use of uninitialized value in concatenation (.) or string at /www/oasis/html/index.cgi line 26.
ってでてるよ>116
118(1): 03/04/06 10:45 ID:??? AAS
書き方まずかったかな?
>>71はブロックの外で宣言すると、例えばサブルーチンの中からでも参照できてしまうので
変数宣言する時は、スコープを絞って適切なブロック内で宣言しよう…と言っているのだと思う。
修正というか、むしろ改悪されえてるような・・・。
our にしてしまうと、他のファイルからも値を参照出来る様になってしまうので、
# つっこみたかったのは、
# > この部分って全部グローバルだからourになっちゃうよん
# my で宣言してるのに勝手に our にはならないよー。ってこと。
よくある方法だと、main関数(サブルーチン)を作るか、
単にブロックで囲む。(ラベルは別にいらないけど便宜上)
省8
119: 37 ◆0wPZQfeVoI 03/04/06 14:26 ID:??? AAS
なるほど。
囲ってみます。
120: 71 03/04/06 15:01 ID:??? AAS
>>118
>変数宣言する時は、スコープを絞って適切なブロック内で宣言しよう…と言っているのだと思う。
そいう意味.、言い方まずかったですな・・・
121(2): 03/04/06 15:42 ID:??? AAS
{}って
while{} foreach{} for{} sub{} {}
が?有効なの
if{}はどうなるの?
122: 03/04/06 15:46 ID:??? AAS
漏れはグローバル変数使いまくりだけど だめかい?
123: 71 03/04/06 15:49 ID:??? AAS
AA省
124(1): 03/04/06 15:57 ID:??? AAS
別に全部$hogehogeみたいなやつでいいじゃん
なんで局所変数とかみんなつかうの????
125(1): 71 03/04/06 16:00 ID:??? AAS
>>124見通しが悪くなるから。
誤動作の元にもなりかねんし
126(1): 03/04/06 16:05 ID:??? AAS
>>125
でも配ってるやつってほとんどグローバル変数のみじゃん
127(2): 71 03/04/06 16:12 ID:??? AAS
>>126だから自分で組んでるんだが?
グローバルがいいっていうなら、そうすればいいのじゃない?
自分だけでやっとればいいってのなら一向にかまわないけど、
複数の人がからんでくるとなるとそうもいかない
128(1): 37 ◆0wPZQfeVoI 03/04/06 16:44 ID:??? AAS
取り合えず少し直してみました。
今日はPHPで学校の掲示板を作るので
あまり変更はないかもしれません。
>>71さん
気をつけないと
if ($hoge eq 'hoge') {
my $foo = 'hoge!';
}
print $foo;
この場合マズイですよね?
省1
129(1): 71 03/04/06 16:49 ID:??? AAS
>>128
それはスコープの外に print $fooがあるので動作しない
if ($hoge eq 'hoge') {
my $foo = 'hoge!';
print $foo;
}
コレが正解
130: 37 ◆0wPZQfeVoI 03/04/06 19:43 ID:??? AAS
>>129さん
OKっす。
要はCのautoですよね?
131: 03/04/06 20:10 ID:??? AAS
myを使わなきゃダメって訳じゃない。
使った方が良いってだけで。
132: 03/04/07 00:03 ID:??? AAS
グローバルである必要がないならレキシカルを使うほうが
安全だし速度的にも有利だからね。
133(1): 03/04/07 15:58 ID:??? AAS
use vars使うのは反則?
134: 03/04/07 16:14 ID:??? AAS
ありじゃないの?
じゃなきゃそんなモジュール作らんよ。
135: 03/04/07 18:46 ID:??? AAS
>>133
使い方次第
136: 03/04/07 22:42 ID:??? AAS
localを使おう
137(2): ◆YHmsETNOS2 03/04/08 16:35 ID:??? AAS
すみませんがちょっと漏れのスクリプトを見てください。
ソートの練習なんです。
いちおう漏れの思っている動作しているのですが,突っ込むところがあれば,後学のために色々教えてください。
ソースはこちら,
外部リンク:members.tripod.co.jp
使ったデータはこちら
外部リンク[txt]:members.tripod.co.jp
要 cgi-lib.pl です。
たいしたものじゃなくてごめんなさい。
初心者なんで,これでも1週間かかっちゃったんです。
省1
138(1): 03/04/08 18:57 ID:??? AAS
>>137
myとかの使い方覚えたほうがいいかも
まだはじめたばかりなのならPHPもいいかもよ
でスクリプトに関しては
ファイルをアップロードするわけでもないんだし
自前でデコードしよう。
139: ◆IzdKJ.WAZA 03/04/08 19:02 ID:??? AAS
>>137
漏れも挑戦してみていいかい?
140: ◆IzdKJ.WAZA 03/04/08 19:45 ID:??? AAS
疲れた。。とりあえずこんなん?
外部リンク[txt]:iwh11.hp.infoseek.co.jp
PerlスクリプトなんでDOSから動かしてね
141: 03/04/08 20:25 ID:??? AAS
my, our でも変数のスコープは同じなんだけどなぁ。
varsプラグマ(v5.6以降だと our)を使うのは、
use strict 'vars'プラグマを有効にした時に、
複数のパッケージである変数を別のパッケージから使いたい場合、等。
no strict は、場合によっては反則 ...
142(1): 03/04/08 23:45 ID:??? AAS
そういえば、さっきmyとmyなしでベンチマークを行ったら
myの方が3,4倍遅かったのだけど…。メモリ消費は解らない。
143(1): 71 03/04/09 03:32 ID:??? AAS
自分の趣味でリファレンスを使ってソースを書いてみた・・・
cgi-lib使ったことないからあてずっぽうだけど、かなりソース書きなおす事になったねぇ
外部リンク[txt]:iwh15.hp.infoseek.co.jp
144(1): 71 03/04/09 03:33 ID:??? AAS
>>143 8-9行目
if ($in{'rev'}){
my $script = 'http://' . $ENV{'SERVER_NAME'} . $ENV{'SCRIPT_NAME'};
ココ逆だな・・・
my $script = 'http://' . $ENV{'SERVER_NAME'} . $ENV{'SCRIPT_NAME'};
if ($in{'rev'}){
145(1): ◆YHmsETNOS2 03/04/09 04:42 ID:??? AAS
>>138
> myとかの使い方覚えたほうがいいかも
わかりました。勉強します。
> PHPもいいかもよ
perlと心中しまつ。
> ファイルをアップロードするわけでもないんだし
いやいや、今後画像をあぷすて貼り付けるつもりなので。。。
いつになるかわかりませんが。。。。。
>>144
うわぁ、ソースが綺麗でつ。
省8
146(1): 71 03/04/09 04:57 ID:??? AAS
>>145 動かしてないからねぇ(w
穴ありまくりであろうかと
147: 03/04/09 09:53 ID:??? AAS
> そういえば、さっきmyとmyなしでベンチマークを行ったら
> myの方が3,4倍遅かったのだけど…。メモリ消費は解らない。
根拠を示さずに結果だけ取り出して言われても…。誤解されないかな?
my の何のベンチマークを行なったの?
ループ・ブロック内で変数を宣言して、そのオーバーヘッドを測っていた
なんて事はないよね?それとも、ホントに変数の参照・代入が3〜4倍もかかったりした?
148: 03/04/09 10:12 ID:??? AAS
>>142
myのほうが遅いというのはちょっと信じがたいな。
ブロック外から参照される必要がないからシンボルテーブルにも
登録されないし、むしろ速くなるはずだが・・・
149(1): ◆YHmsETNOS2 03/04/10 04:22 ID:??? AAS
>>146
$html =<<'EOT'; を $html =<<"EOT"; でOKでした。
なお、ローカルで動かない件は、cgi-lib.pl へのパスが違っていたというアフォが原因。
150: 71 03/04/10 05:35 ID:??? AAS
>>149
シングルクオートよくやっちゃうんですよ〜(w
動いてよかったです
151(1): 03/04/10 06:38 ID:??? AAS
cgi-bin.pl って
確か、CGI.pmがサポートしてたはず・・・
標準モジュールだよ。
use CGI qw(:cgi-bin);
152: 71 03/04/10 06:41 ID:??? AAS
>>151
自分で処理を書くもんでねぇ・・・
153(1): 03/04/10 10:43 ID:ljl/7aqx(1/2) AAS
ベンチマーク取って見たけど…明らかに my を使った方が高速。
-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,{
省7
154: 03/04/10 13:31 ID:??? AAS
>>153
追試。
--- 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
省13
155(1): 03/04/10 18:05 ID:??? AAS
>>121
if ( ( my $aho = $query->param('hogehoge') ) eq 'hoge') {
$a =~ s/a/b/;
$nazoflag .= $a;
} else {
# $ahoは見える。
}
# $ahoは見えない。
while ( defined ( my $line = <IN> ) ) {
# $lineは見える
省5
156: 03/04/10 18:08 ID:??? AAS
2行目が間違ってた。$aだとuse strictでエラーにならないから$ahoにしたんだけど、
これは、、sort用にこっそり、エラーにしないようになってるのかな。
追加、これはなかなか使える
foreach my $hoge (@list) {
}
157: 03/04/10 18:36 ID:ljl/7aqx(2/2) AAS
>>155
質問。continue って何?
158: 03/04/10 18:58 ID:??? AAS
man perlsyn
159: 03/04/10 20:47 ID:??? AAS
”次のループに移る前に実行されるブロック”であってる?
こんな制御構文あったんだ。知らなかった。Thx >> 158
160: 03/04/10 20:58 ID:??? AAS
うん。これは、nextとかを使うとき、行番号が確実に進むようにする、みたいに使う
161: ◆MvRbZL6NeQ 03/04/11 00:23 ID:??? AAS
なるほど
162: [ ] 03/04/11 00:36 ID:??? AAS
つまりはforの後処理か
163(3): ◆YHmsETNOS2 03/04/12 20:17 ID:??? AAS
再び。。。
すみませんがちょっと漏れのスクリプトを見てください。
前回のソートの練習に加え、ページの分割もしてみますた。
いちおう漏れの思っている動作しているのですが,突っ込むところがあれば,後学のために色々教えてください。
なお、前回指摘された “myとかの使い方” は。。。。。(^^A
ソースはこちら,
外部リンク[txt]:members.tripod.co.jp
使ったデータはこちら
外部リンク[txt]:members.tripod.co.jp
要 cgi-lib.pl です。
省1
164(2): 71 03/04/12 22:26 ID:??? AAS
>>163
登録データの件数が増えるのならば
sortの cmp と <=>のルーチンを考えたほうがいいかも
foreach(@keys){
if($_->[$n] !~ /^\d*$/){
$num_flug =1;
last;
}
}
データ量増えていくと、cmpを使う場合処理が遅くなる。
省14
165(1): 71 03/04/12 22:31 ID:??? AAS
>>164
if($n= 3){
だな、このデータの場合
166(2): 03/04/12 22:53 ID:??? AAS
=なんですか?
167(1): 71 03/04/12 23:00 ID:??? AAS
>>166
==だね(汗
上下前次1-新書関写板覧索設栞歴
あと 505 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.030s